我刚刚了解了java.sql package
。它使用Class.forName()
动态加载扩展DriverManager
的驱动程序。
然后我们使用DriverManager.getConnection()
方法获得连接。
那么整个事情如何运作?
DriverManager类如何知道如何在不使用实际驱动程序的类名的情况下获取连接。
我们也可以将Class.forName()用于自定义应用程序...如果通过示例进行解释,我将非常高兴。
最佳答案
Class.forName
只需加载一个类,包括运行其静态初始化程序,如下所示:
class Foo {
static {
System.out.println("Foo initializing");
}
}
public class Test {
public static void main(String [] args) throws Exception {
Class.forName("Foo");
}
}
您正在谈论的所有其余过程都是特定于JDBC的。该驱动程序-实现
Driver
,而不扩展DriverManager
-只需使用DriverManager.registerDriver
注册一个适当的实例。然后,当DriverManager
需要为特定的连接字符串找到驱动程序时,它将依次在每个已注册的驱动程序上调用connect
,直到一个成功并返回非空连接为止。请注意,这种注册驱动程序的方式相当过时-请查看
DriverManager
的文档,以获取获取数据源的更现代的方法。关于java - Class.forName()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4202252/