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
相关文档:
今天为了安装MySQl,搞了5个多钟,中午饭都没吃,先是start service 不通过,再是Apply security settings 不通过(报了个1045的Error),后来终于TMD的搞到它通过了,解决办法如下:
《第一种成功,第二和第三种没试》,第二和第三是别人提供的。
方法一:
1, 卸载MySQL
2, 删除目录 C:\Documents and Settings\用户名 ......
很久没有做java的项目了,今天逛了逛CSDN的论坛,很幸运的遇到这篇文章,写的不错。有几个要点,以前理解的都不透。所以收藏了,谢谢论坛ID:为 yrjxm007 的网友。 对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重 ......
最近遇到了一个问题,就是在用到List.toArray 方法时,返回Object[]数组,直接把它强转成其他类型的会报错:
code: ArrayList list=getList();
String[] s=(String[])list.toArray();
except ......
采用欲扬先抑的手法谈谈java:
java没有指针只有引用是最大的败笔.正因为没有指针,很多操作要迂回婉转;垃圾收集机制也觉得是鸡肋,写个析构函数真的那么复杂吗, 有必要牺牲灵活性吗;函数调用的代价之高让人抓狂
但我还是选择了她:
java的纯面向对象特 ......