JDBC中链接数据库前为什么要用Class.forName(驱动类)加载驱动类?

本文解释了在使用JDBC连接数据库时,通过Class.forName方法加载驱动类的原因。具体来说,这是为了触发静态初始化块中的驱动注册过程。文章还提供了MySQL驱动类的源码示例,展示了如何在类加载时自动完成驱动的注册。

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

转载于:https://www.cnblogs.com/qingergege/p/8202379.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值