JDBC中鏈接數據庫前為什么要用Class.forName(驅動類)加載驅動類?


使用JDBC鏈接數據庫時,為什么要先使用Class.forName(String name)來加載類?

 

答:

實際上就是為了加載類時,調用靜態初始化塊中的注冊函數。

可以看一下MySql的Driber類源碼

1.    class Driver extends NonRegisteringDriver implements java.sql.Driver {  
2.        // ~ Static fields/initializers  
3.        // ---------------------------------------------  
4.      
5.        //  
6.        // Register ourselves with the DriverManager  
7.        //  
8.        static {  
9.            try {  
10.                java.sql.DriverManager.registerDriver(new Driver());  
11.            } catch (SQLException E) {  
12.                throw new RuntimeException("Can't register driver!");  
13.            }  
14.        }  
15.      
16.        // ~ Constructors  
17.        // -----------------------------------------------------------  
18.      
19.        /** 
20.         * Construct a new driver and register it with DriverManager 
21.         *  
22.         * @throws SQLException 
23.         *             if a database error occurs. 
24.         */  
25.        public Driver() throws SQLException {  
26.            // Required for Class.forName().newInstance()  
27.        }  
28.    }  

 

可以看到在第10行代碼,也就是靜態初始化塊中,的代碼是用於注冊驅動的。

所以用Class.forName實際上就是為了調用這個注冊驅動的方法。

當然我們也可以直接調用DriverManager類中的registerDriver(new com.mysql.jdbc.Driver())來進行驅動的注冊,這樣就不用Class.forName了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM