您的位置:首页 > 数据库 > MySQL

DriverManager.registerDriver(new com.mysql.jdbc.Driver())为什么Driver会创建两次

2017-04-20 09:24 459 查看
在学习JDBC的时候,通常有两种方式去注册数据库驱动程序(这里采用MySQL数据库),分别为:

Java代码

1. DriverManager.registerDriver(new Driver());

2. Class.forName(“com.mysql.jdbc.Driver”);

那么这两种方式有什么异同呢?首先我们到DriverManager中去看一下,

Java代码

1. public static synchronized void registerDriver(java.sql.Driver driver)

2. throws SQLException {

3. if (!initialized) {

4. initialize();

5. }

6.

7. DriverInfo di = new DriverInfo();

8.

9. di.driver = driver;

10. di.driverClass = driver.getClass();

11. di.driverClassName = di.driverClass.getName();

12.

13. // Not Required – drivers.addElement(di);

14.

15. writeDrivers.addElement(di);

16. println(“registerDriver: ” + di);

17.

18. /* update the read copy of drivers vector */

19. readDrivers = (java.util.Vector) writeDrivers.clone();

20.

21. }

很明显,DriverManager将我们需要注册的驱动程序信息封装成DriverInfo放进了一个writeDrivers中,这个writeDrivers是DriverManager中声明的一个static类型Vector变量。在getConnection的时候会再用到。

那么Class.forName(“com.mysql.jdbc.Driver”)是如何注册驱动程序的呢,我们知道Class.forName(“类名”)的主要作用是向虚拟机实例化一个Class实例,我们看一下com.mysql.jdbc.Driver的源代码。

Java代码

1. public 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. }

在 com.mysql.jdbc.Driver中有一段静态代码块,是向 DriverManager注册一个Driver实例。这样在Class.forName(“com.mysql.jdbc.Driver”)的时候,就会首先去执行这个静态代码块,于是和DriverManager.registerDriver(new Driver())有了相同的效果。

那么对于这两种方法,在这里,推荐使用第二种,即Class.forName(“类名”)的方式。原因有两点

1、在我们执行DriverManager.registerDriver(new Driver())的时候,静态代码块也已经执行了,相当于是实例化了两个Driver对象。

2、 DriverManager.registerDriver(new Driver())产生了一种对MySQL的一种依赖。而Class.forName的方式我们完全可以在运行的时候再动态改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 java mysql jdbc
相关文章推荐