diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 4694529e3f..023a777ad9 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -17,9 +17,11 @@ package com.alibaba.druid.util; import java.io.Closeable; import java.io.IOException; +import java.io.InputStream; import java.io.PrintStream; import java.io.Reader; import java.io.StringWriter; +import java.net.URL; import java.sql.Connection; import java.sql.Date; import java.sql.ResultSet; @@ -27,12 +29,38 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.util.Enumeration; +import java.util.Properties; /** * @author wenshao */ public final class JdbcUtils { + private static final Properties driverUrlMapping = new Properties(); + + static { + try { + for (Enumeration e = Thread.currentThread().getContextClassLoader().getResources("META-INF/druid-driver.properties"); e.hasMoreElements();) { + URL url = e.nextElement(); + + Properties property = new Properties(); + + InputStream is = null; + try { + is = url.openStream(); + property.load(is); + } finally { + JdbcUtils.close(is); + } + + driverUrlMapping.putAll(property); + } + } catch (Exception e) { + e.printStackTrace(); // error skip + } + } + public final static void close(Connection x) { if (x != null) { try { @@ -346,6 +374,8 @@ public final class JdbcUtils { return "oracle.jdbc.driver.OracleDriver"; } else if (rawUrl.startsWith("jdbc:microsoft:")) { return "com.microsoft.jdbc.sqlserver.SQLServerDriver"; + } else if (rawUrl.startsWith("jdbc:sybase:Tds:")) { + return "com.sybase.jdbc2.jdbc.SybDriver"; } else if (rawUrl.startsWith("jdbc:jtds:")) { return "net.sourceforge.jtds.jdbc.Driver"; } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { @@ -364,6 +394,30 @@ public final class JdbcUtils { return "org.h2.Driver"; } else if (rawUrl.startsWith("jdbc:mckoi:")) { return "com.mckoi.JDBCDriver"; + } else if (rawUrl.startsWith("jdbc:cloudscape:")) { + return "COM.cloudscape.core.JDBCDriver"; + } else if (rawUrl.startsWith("jdbc:informix-sqli:")) { + return "com.informix.jdbc.IfxDriver"; + } else if (rawUrl.startsWith("jdbc:timesten:")) { + return "com.timesten.jdbc.TimesTenDriver"; + } else if (rawUrl.startsWith("jdbc:as400:")) { + return "com.ibm.as400.access.AS400JDBCDriver"; + } else if (rawUrl.startsWith("jdbc:sapdb:")) { + return "com.sap.dbtech.jdbc.DriverSapDB"; + } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { + return "com.jnetdirect.jsql.JSQLDriver"; + } else if (rawUrl.startsWith("jdbc:JTurbo:")) { + return "com.newatlanta.jturbo.driver.Driver"; + } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { + return "org.firebirdsql.jdbc.FBDriver"; + } else if (rawUrl.startsWith("jdbc:interbase:")) { + return "interbase.interclient.Driver"; + } else if (rawUrl.startsWith("jdbc:pointbase:")) { + return "com.pointbase.jdbc.jdbcUniversalDriver"; + } else if (rawUrl.startsWith("jdbc:edbc:")) { + return "ca.edbc.jdbc.EdbcDriver"; + } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { + return "com.mimer.jdbc.Driver"; } else { throw new SQLException("unkow jdbc driver"); } diff --git a/src/main/resources/META-INF/druid-driver.properties b/src/main/resources/META-INF/druid-driver.properties new file mode 100644 index 0000000000..39c23c5c83 --- /dev/null +++ b/src/main/resources/META-INF/druid-driver.properties @@ -0,0 +1,13 @@ +jdbc:derby:=org.apache.derby.jdbc.EmbeddedDriver +jdbc:mysql:=com.mysql.jdbc.Driver +jdbc:oracle:=oracle.jdbc.driver.OracleDriver +jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver +jdbc:jtds:=net.sourceforge.jtds.jdbc.Driver +jdbc:postgresql:=org.postgresql.Driver +jdbc:fake:=com.alibaba.druid.mock.MockDriver +jdbc:hsqldb:=org.hsqldb.jdbcDriver +jdbc:db2:=COM.ibm.db2.jdbc.app.DB2Driver +jdbc:sqlite:=org.sqlite.JDBC +jdbc:ingres:=com.ingres.jdbc.IngresDriver +jdbc:h2:=org.h2.Driver +jdbc:mckoi:=com.mckoi.JDBCDriver \ No newline at end of file