diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseType.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseType.java index c53aeb9960d3580e71471cd64d953b937c4473b6..fa42fb9b845d8f4f2c77bc3ab6bcf401c4d2e70a 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseType.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseType.java @@ -18,6 +18,11 @@ package com.dangdang.ddframe.rdb.sharding.constants; import com.dangdang.ddframe.rdb.sharding.exception.DatabaseTypeUnsupportedException; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; + +import java.util.Arrays; /** * 支持的数据库类型. @@ -26,7 +31,13 @@ import com.dangdang.ddframe.rdb.sharding.exception.DatabaseTypeUnsupportedExcept */ public enum DatabaseType { - H2, MySQL, Oracle, SQLServer, DB2, PostgreSQL; + H2("H2"), MySQL("MySQL"), Oracle("Oracle"), SQLServer("Microsoft SQL Server"), DB2("DB2"), PostgreSQL("PostgreSQL"); + + private final String productName; + + DatabaseType(final String productName) { + this.productName = productName; + } /** * 获取数据库类型枚举. @@ -35,10 +46,15 @@ public enum DatabaseType { * @return 数据库类型枚举 */ public static DatabaseType valueFrom(final String databaseProductName) { - try { - return DatabaseType.valueOf(databaseProductName); - } catch (final IllegalArgumentException ex) { - throw new DatabaseTypeUnsupportedException(databaseProductName); + Optional databaseTypeOptional = Iterators.tryFind(Arrays.asList(DatabaseType.values()).iterator(), new Predicate() { + @Override + public boolean apply(final DatabaseType input) { + return input.productName.equals(databaseProductName); + } + }); + if (databaseTypeOptional.isPresent()) { + return databaseTypeOptional.get(); } + throw new DatabaseTypeUnsupportedException(databaseProductName); } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseTypeTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseTypeTest.java index 81b54c3df68524a8fb26cedbe4921d5e102d020c..cbb1653728d3dd9effa932019c292ed576262eaa 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseTypeTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/constants/DatabaseTypeTest.java @@ -30,7 +30,7 @@ public final class DatabaseTypeTest { assertThat(DatabaseType.valueFrom("H2"), is(DatabaseType.H2)); assertThat(DatabaseType.valueFrom("MySQL"), is(DatabaseType.MySQL)); assertThat(DatabaseType.valueFrom("Oracle"), is(DatabaseType.Oracle)); - assertThat(DatabaseType.valueFrom("SQLServer"), is(DatabaseType.SQLServer)); + assertThat(DatabaseType.valueFrom("Microsoft SQL Server"), is(DatabaseType.SQLServer)); assertThat(DatabaseType.valueFrom("DB2"), is(DatabaseType.DB2)); } diff --git a/sharding-jdbc-doc/content/post/release_notes.md b/sharding-jdbc-doc/content/post/release_notes.md index 0fd599fcfa0b3c74cfeaa846e287e0f7cd8de927..89144bdd70d6894986c0b55710d60e1bb7a4c1be 100644 --- a/sharding-jdbc-doc/content/post/release_notes.md +++ b/sharding-jdbc-doc/content/post/release_notes.md @@ -21,6 +21,7 @@ weight = 1 1. [ISSUE #118](https://github.com/dangdangdotcom/sharding-jdbc/issues/118) 同一个线程内先执行DQL后执行DML,DML操作在从库上执行 1. [ISSUE #122](https://github.com/dangdangdotcom/sharding-jdbc/issues/122) bed的fail重试问题 1. [ISSUE #152](https://github.com/dangdangdotcom/sharding-jdbc/issues/152) 可能同一个connection多线程导致问题 +1. [ISSUE #150](https://github.com/dangdangdotcom/sharding-jdbc/issues/150) 与最新SQLserver jdbc驱动兼容问题 ## 1.3.2