在学习JDBC的时候,通常有两种方式去注册数据库驱动程序(这里采用MySQL数据库),分别为:
Java代码
1. DriverManager.registerDriver(new Driver());
2. Class.forName(“com.mysql.jdbc.Driver”);
那么这两种方式有什么异同呢? 查看com.mysql.jdbc.Driver源码, 发现如下静态代码块: 当加载Driver类时,静态代码块也会new一个Driver对象。
package com.mysql.jdbc;
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register 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的方式我们完全可以在运行的时候再动态改变。