DriverManager.getConnection 加载驱动的顺序

因为业务需要程序中重写了jdbc Driver类.com.jdbc.JlinsDriver并使用static 直接
class.forName(com.jdbc.JlinsDriver);

因其他业务需求在执行如下代码的时候
Class.forName("oracle.jdbc.OracleDriver");
connection = DriverManager.getConnection(firstlyUrl, info);

发现程序直接跳到了 com.jdbc.JlinsDriver 类里面去了,
翻看了 DriverManager 源代码发现 每次class.forName的时候会把驱动按照顺序放到ArrayList<Dirver> theDrivers 当中,每次 getConnection的时候从第一个开始加载,如果第一个返回不正确则加载第二个,在每个dirver实现类里面都会有acceptsURL(String url)方法来验证当前的url是否符合当前的驱动,如下代码(IBM JDK),java标准jdk实现方式差不多
for (Driver theDriver : theDrivers) {
                Connection theConnection = theDriver.connect(url, info);
                if (theConnection != null) {
                    return theConnection;
                }
            }


你可能感兴趣的:(DriverManager.getConnection 加载驱动的顺序)