我被告知加载JDBC驱动程序的首选方法是:
Class.forName(driverName);
我理解这对于从XML配置文件或用户输入读取的多个驱动程序之间的动态决策更好。我很好奇的是,如何调用此语句将指定的驱动程序加载到我们甚至不在任何地方存储结果“类”对象的环境中。 JavaDocs条目说:
public static Class forName(String className)
throws ClassNotFoundExceptionReturns
返回与具有给定字符串名称
的类或接口关联的Class对象
在这种情况下,Java开发人员如何仅使用此语句设法促进驱动程序对象的存在?
答案 0 :(得分:27)
Class#forName()
运行static initializers(您知道,static
适用于该类,而不适用于该实例)。 JDBC驱动程序实现should在静态初始化程序中注册自己。
public class SomeDriver implements Driver {
static {
DriverManager.registerDriver(new SomeDriver());
}
}
请注意,存在错误的JDBC驱动程序,例如org.gjt.mm.mysql.Driver
,它错误地在构造函数中注册自己。这就是为什么你需要在这些驱动程序之后进行newInstance()
调用才能让他们自己注册。