当前位置: 代码迷 >> J2EE >> JDBC:DriverManager.registerDriver(new com.mysql.jdbc.Driver()););该怎么处理
  详细解决方案

JDBC:DriverManager.registerDriver(new com.mysql.jdbc.Driver()););该怎么处理

热度:303   发布时间:2016-04-22 01:17:59.0
JDBC:DriverManager.registerDriver(new com.mysql.jdbc.Driver()););
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
在java中用这种方式注册驱动,程序出错,有包
用Class.forName("com.mysql.jdbc.Driver")这个就没有错

------解决方案--------------------
Class.forName("com.mysql.jdbc.Driver")

这句话表示加载驱动。至于为什么这样会加载驱动呢?因为 JDBC 规范要求在 Driver 实现类的静态块中使用 DriverManager.registerDriver 方法把自己注册给驱动管理器。

根据 Java 类加载的规定,在类加载时除了会初始化类的信息之外,还会初始化所有 static 的东西,比如静态块、静态成员、静态方法,以及静态内部类。

DriverManager.registerDriver 方法不是给开发人员使用的,这是给 JDBC 驱动厂商用的。
------解决方案--------------------
“在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序”
那如何才能自动注册呢,有一点需要注意的就是Class.forName就可以注册,只能将注册信息添加到静态代码中,所有Driver代码的实现类中都采用了 
static {
try {
DriverManager.registerDriver(new ProxoolDriver());
} catch (SQLException e) {
System.out.println(e.toString());
}
}
这种方式进行注册,这样在Class.forName的时候就会执行上面的代码,也就想系统注册驱动程序,注册驱动程序就是他会组装DriverInfo 后缓存到DriverManager中,便于后面进行处理
  相关解决方案