From 0ff09fa55497bd0fcf3a8ea1914bfe650de9a07c Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 21 May 2011 12:31:02 +0000 Subject: [PATCH] =?UTF-8?q?SqlStat=E6=B7=BB=E5=8A=A0DbType=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@183 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/DruidAbstractDataSource.java | 8 ++- .../alibaba/druid/pool/DruidDataSource.java | 2 + .../druid/proxy/jdbc/DataSourceProxy.java | 2 + .../druid/proxy/jdbc/DataSourceProxyImpl.java | 8 +++ .../com/alibaba/druid/stat/JdbcSqlStat.java | 8 +-- .../com/alibaba/druid/util/JdbcUtils.java | 62 +++++++++++++++++++ 6 files changed, 85 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 016a5c492d..1bf0317899 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -130,6 +130,12 @@ public abstract class DruidAbstractDataSource implements DataSource, DataSourceP protected List connectionInitSqls; + protected String dbType; + + public String getDbType() { + return dbType; + } + public void addConnectionProperty(String name, String value) { if (inited) { throw new UnsupportedOperationException(); @@ -653,7 +659,7 @@ public abstract class DruidAbstractDataSource implements DataSource, DataSourceP } catch (InvocationTargetException e) { throw new SQLException("passwordCallback Error", e); } - + try { Method method = passwordCallback.getClass().getMethod("setProperties", Properties.class); method.invoke(passwordCallback, properties); diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 37be21883e..36edec65f2 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -110,6 +110,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (this.driverClass == null || this.driverClass.isEmpty()) { this.driverClass = JdbcUtils.getDriverClassName(this.jdbcUrl); } + + this.dbType = JdbcUtils.getDbType(jdbcUrl, driverClass.getClass().getName()); try { driver = (Driver) Class.forName(this.driverClass).newInstance(); diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java index 5104ce477d..86a1752d34 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java @@ -26,6 +26,8 @@ import com.alibaba.druid.filter.Filter; public interface DataSourceProxy { String getName(); + + String getDbType(); Driver getRawDriver(); diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java index 8aa92bb50e..6778735a69 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java @@ -36,6 +36,7 @@ import javax.security.auth.callback.PasswordCallback; import com.alibaba.druid.filter.Filter; import com.alibaba.druid.filter.FilterChain; import com.alibaba.druid.filter.FilterChainImpl; +import com.alibaba.druid.util.JdbcUtils; /** * @author wenshao @@ -52,10 +53,17 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl private Properties properties; + private String dbType; + public DataSourceProxyImpl(Driver rawDriver, DataSourceProxyConfig config){ super(); this.rawDriver = rawDriver; this.config = config; + this.dbType = JdbcUtils.getDbType(config.getRawUrl(), config.getRawDriverClassName()); + } + + public String getDbType() { + return dbType; } public Driver getRawDriver() { diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index 3f5b97d307..797d5aa1d6 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -61,6 +61,10 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { private final AtomicLong updateCount = new AtomicLong(); private final AtomicLong fetchRowCount = new AtomicLong(); + public JdbcSqlStat(String sql){ + this.sql = sql; + } + public String getDbType() { return dbType; } @@ -117,10 +121,6 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { context.setFile(val); } - public JdbcSqlStat(String sql){ - this.sql = sql; - } - public String getName() { return name; } diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 129cc7745e..04362eef8f 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -422,4 +422,66 @@ public final class JdbcUtils { throw new SQLException("unkow jdbc driver : " + rawUrl); } } + + public static String getDbType(String rawUrl, String driverClassName) { + if (rawUrl == null) { + return null; + } + + if (rawUrl.startsWith("jdbc:derby:")) { + return "derby"; + } else if (rawUrl.startsWith("jdbc:mysql:")) { + return "mysql"; + } else if (rawUrl.startsWith("jdbc:oracle:")) { + return "oracle"; + } else if (rawUrl.startsWith("jdbc:microsoft:")) { + return "sqlserver"; + } else if (rawUrl.startsWith("jdbc:sybase:Tds:")) { + return "sybase"; + } else if (rawUrl.startsWith("jdbc:jtds:")) { + return "jtds"; + } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { + return "mock"; + } else if (rawUrl.startsWith("jdbc:postgresql:")) { + return "postgresql"; + } else if (rawUrl.startsWith("jdbc:hsqldb:")) { + return "hsql"; + } else if (rawUrl.startsWith("jdbc:db2:")) { + return "db2"; + } else if (rawUrl.startsWith("jdbc:sqlite:")) { + return "sqlite"; + } else if (rawUrl.startsWith("jdbc:ingres:")) { + return "ingres"; + } else if (rawUrl.startsWith("jdbc:h2:")) { + return "h2"; + } else if (rawUrl.startsWith("jdbc:mckoi:")) { + return "mckoi"; + } else if (rawUrl.startsWith("jdbc:cloudscape:")) { + return "cloudscape"; + } else if (rawUrl.startsWith("jdbc:informix-sqli:")) { + return "informix"; + } else if (rawUrl.startsWith("jdbc:timesten:")) { + return "timesten"; + } else if (rawUrl.startsWith("jdbc:as400:")) { + return "as400"; + } else if (rawUrl.startsWith("jdbc:sapdb:")) { + return "sapdb"; + } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { + return "JSQLConnect"; + } else if (rawUrl.startsWith("jdbc:JTurbo:")) { + return "JTurbo"; + } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { + return "firebirdsql"; + } else if (rawUrl.startsWith("jdbc:interbase:")) { + return "interbase"; + } else if (rawUrl.startsWith("jdbc:pointbase:")) { + return "pointbase"; + } else if (rawUrl.startsWith("jdbc:edbc:")) { + return "edbc"; + } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { + return "mimer"; + } else { + return null; + } + } }