java jdbc(mysql)驱动源码分析,JAVA JDBC(MySQL)驱动源码分析(四)
connect方法是java.sql.Driver接口中定義的方法,如果連接的數據庫不同,那么為不同的數據庫編寫JDBC驅動將變得很靈活,實現Driver接口即可。連接數據庫時首先得裝載JDBC驅動,也就是調用 Class.forName(“com.mysql.jdbc.Driver”)方法,在第一篇中已經列出mysql jdbc Driver類的源碼,此類繼承NonRegisteringDriver同時實現了java.sql.Driver接口。找到NonRegisteringDriver類會發現它也實現了java.sql.Driver接口:
public class NonRegisteringDriver implements java.sql.Driver {
……
}
在getConnection方法中有如下一句代碼,
Connection result = di.driver.connect(url, info);
di是DriverInfo類型的對象,此對象中包含了Driver的引用,但是在com.mysql.jdbc.Driver類中只有一個靜態塊和一個構造方法,那么connect方法有可能是在其父類中實現。如前所述,父類為NonRegisteringDriver,在mysql驅動包的源碼中可以找到此類,:
com.mysql.jdbc.NonRegisteringDriver
那么di.driver.connect(url, info) 調用的connect方法就是NonRegisteringDriver類中的connect方法,源碼如下:
public java.sql.Connection connect(String url, Properties info)
throws SQLException {
if (url != null) {
if (StringUtils.startsWithIgnoreCase(url, LOADBALANCE_URL_PREFIX)) {
return connectLoadBalanced(url, info);
} else if (StringUtils.startsWithIgnoreCase(url,
REPLICATION_URL_PREFIX)) {
return connectReplicationConnection(url, info);
}
}
Properties props = null;
if ((props = parseURL(url, info)) == null) {
return null;
}
try {
Connection newConn = com.mysql.jdbc.ConnectionImpl.getInstance(
host(props), port(props), props, database(props), url);
return newConn;
} catch (SQLException sqlEx) {
// Don't wrap SQLExceptions, throw
// them un-changed.
throw sqlEx;
} catch (Exception ex) {
SQLException sqlEx = SQLError.createSQLException(Messages
.getString("NonRegisteringDriver.17") //$NON-NLS-1$
+ ex.toString()
+ Messages.getString("NonRegisteringDriver.18"), //$NON-NLS-1$
SQLError.SQL_STATE_UNABLE_TO_CONN
總結
以上是生活随笔為你收集整理的java jdbc(mysql)驱动源码分析,JAVA JDBC(MySQL)驱动源码分析(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java hadoop api,Hado
- 下一篇: monggodb和mysql混合使用,测