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!");
}
} // ~ Constructors
// ----------------------------------------------------------- /**
* Construct a new driver and register it with DriverManager
*
* @throws SQLException
* if a database error occurs.
*/
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
上面是com.mysql.jdbc.Driver的源代码。通常,我们通过如下的语句进行驱动注册:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
这个方法的代码如下: public static synchronized void registerDriver(java.sql.Driver driver)
throws SQLException { /* Register the driver if it has not already been added to our list */
if(driver != null) {
registeredDrivers.addIfAbsent(new DriverInfo(driver));
} else {
// This is for compatibility with the original DriverManager
throw new NullPointerException();
} println("registerDriver: " + driver); }
可是看上面的Driver源代码中,有这么一段:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}也就是说,在new Driver()的时候,就已经完成了注册,为什么我们还需要使用DriverManager.registerDriver(new com.mysql.jdbc.Driver());这句代码完成注册。直接 new com.mysql.jdbc.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!");
}
} // ~ Constructors
// ----------------------------------------------------------- /**
* Construct a new driver and register it with DriverManager
*
* @throws SQLException
* if a database error occurs.
*/
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
上面是com.mysql.jdbc.Driver的源代码。通常,我们通过如下的语句进行驱动注册:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
这个方法的代码如下: public static synchronized void registerDriver(java.sql.Driver driver)
throws SQLException { /* Register the driver if it has not already been added to our list */
if(driver != null) {
registeredDrivers.addIfAbsent(new DriverInfo(driver));
} else {
// This is for compatibility with the original DriverManager
throw new NullPointerException();
} println("registerDriver: " + driver); }
可是看上面的Driver源代码中,有这么一段:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}也就是说,在new Driver()的时候,就已经完成了注册,为什么我们还需要使用DriverManager.registerDriver(new com.mysql.jdbc.Driver());这句代码完成注册。直接 new com.mysql.jdbc.Driver(); 不就可以了么?
JDK1.6之后开始支持JDBC4.0,已经不需要显示注册驱动了。
JDBC 4.0 的规范规定,所有 JDBC 4.0 的驱动 jar 文件必须包含一个 java.sql.Driver,它位于 jar 文件的 META-INF/services 目录下。这个文件里每一行便描述了一个对应的驱动类。
如果楼主的驱动包里没有这个目录,那就是旧的了,例如connector-java-3.0.11-stable-bin.jar。
楼主可以搜一下jdk1.6新特性中关于jdbc4.0的那部分。