一般而言,我们在Java中连接MysqL数据库只需下面两行代码:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+dbName,userName,password);
但Class.forName()到底干了什么事情呢?
使用Class.forName()会将调用的类初始化,并返回该类的Class对象。我们查看Driver类的source code就会发现,一切就是在初始化的时候搞了鬼。
com.mysql.jdbc.Driver中的部分代码:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
// ~ Static fields/initializers
// ---------------------------------------------
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
……
}
在初始化Driver类的时候,其中的静态代码也会执行,于是乎自动执行下面的语句:
java.sql.DriverManager.registerDriver(new Driver());
就这样,使用forName()初始化Driver后,MySql驱动就自动向DriverManagemer类注册了,使得我们能通过DriverManager获得对MysqL的连接。