使用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了。

相关文章:

  • 2021-11-20
  • 2022-12-23
  • 2021-11-20
  • 2021-06-20
  • 2021-09-07
猜你喜欢
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2021-06-08
  • 2021-05-23
相关资源
相似解决方案