connect方法是java.sql.Driver接口中定义的方法,如果连接的数据库不同,那么为不同的数据库编写JDBC驱动将变得很灵活,实现Driver接口即可。连接数据库时首先得装载JDBC驱动,也就是调用 Class.forName(“com.mysql.jdbc.Driver”)方法,在第一篇中已经列出mysql jdbc Driver类的源码,此类继承NonRegisteringDriver同时实现了java.sql.Driver接口。找到NonRegisteringDriver类会发现它也实现了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方法,源码如下:
在connect方法中传入了两个参数,一个是String 类型的url, 另一个是Properties类型的连接属性信息。
首先判断url是否为null,此判断逻辑中使用了如下类的方法
调用类com.mysql.jdbc.StringUtils
方法 startsWithIgnoreCase 其中使用了String 类中的方法regionMatches
regionMatches方法两种原型为:
这两个重载的方法用来比较两个字符串中指定区域的子串。
传入的静态常量参数:
根据下面的判断调用不同的方法返回Connection对象
如果url为null, 则通过如下方法返回Connection
未完待续......