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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值