因为业务需要程序中重写了jdbc Driver类.com.jdbc.JlinsDriver并使用static 直接
因其他业务需求在执行如下代码的时候
[color=blue]发现程序直接跳到了 com.jdbc.JlinsDriver 类里面去了[/color],
翻看了 DriverManager 源代码发现 [color=blue]每次class.forName的时候会把驱动按照顺序放到ArrayList<Dirver> theDrivers 当中,每次 getConnection的时候从第一个开始加载,如果第一个返回不正确则加载第二个,在每个dirver实现类里面都会有acceptsURL(String url)方法来验证当前的url是否符合当前的驱动[/color],如下代码(IBM JDK),java标准jdk实现方式差不多
class.forName(com.jdbc.JlinsDriver);
因其他业务需求在执行如下代码的时候
Class.forName("oracle.jdbc.OracleDriver");
connection = DriverManager.getConnection(firstlyUrl, info);
[color=blue]发现程序直接跳到了 com.jdbc.JlinsDriver 类里面去了[/color],
翻看了 DriverManager 源代码发现 [color=blue]每次class.forName的时候会把驱动按照顺序放到ArrayList<Dirver> theDrivers 当中,每次 getConnection的时候从第一个开始加载,如果第一个返回不正确则加载第二个,在每个dirver实现类里面都会有acceptsURL(String url)方法来验证当前的url是否符合当前的驱动[/color],如下代码(IBM JDK),java标准jdk实现方式差不多
for (Driver theDriver : theDrivers) {
Connection theConnection = theDriver.connect(url, info);
if (theConnection != null) {
return theConnection;
}
}