日期:2014-05-16  浏览次数:20458 次

Class.forName()做了什么——连接MySqL数据库为例

一般而言,我们在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的连接。