在使用传统的JDBC连接数据库的时候,总是需要这一句(以MySQL为例):
Class.forName("com.mysql.jdbc.Driver");
以前我也没深究,只是看网上的例子都这么写,实际上也跑通了,于是便懒得去管内部原理。不过大概还是清楚的,知道这句话是向DriverManage注册了一个MySQL的JDBC Driver。
但为什么要用Class.forName这样看上去不是很优雅的方式呢?
网上还流传了一个这样的版本Class.forName("com.mysql.jdbc.Driver").newInstance(),似乎有点儿多此一举。
经过实验,我发现用com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver() 也是可以的,但是只声明
com.mysql.jdbc.Driver driver = null ,而不实例化却又是不行的。
那么Driver的注册到底是在类的初始化时进行的,还是在类的对象初始化时进行的呢? 我也不知道,最好的办法还是看源码:
package com.mysql.jdbc;
import java.sql.DriverManager;
import java.sql.SQLException;
// Referenced classes of package com.mysql.jdbc:
// NonRegisteringDriver
public class Driver extends NonRegisteringDriver
{