gpt4 book ai didi

java - DriverManager.registerDriver() 静态方法

转载 作者:行者123 更新时间:2023-11-30 07:52:16 26 4
gpt4 key购买 nike

我正在研究 Java JDBC API,并且了解到数据库应用程序的第一步当然是获取与 DBMS 的连接。现在,我知道 DriverManager 是包中为数不多的(迄今为止我遇到的唯一类)具体类之一,它有一个私有(private)构造函数和静态方法(这意味着我无法实例化它,即使我想要)。因此,DriverManager 类(在 JDBC 4.0 之后)会自动加载供应商驱动程序中包含的 Driver 接口(interface)实现(而不是手动调用 Class.forName("blahblah") 来加载该类),并且实现类本身在他们按照这些思路做了一些事情:

static {
Driver driver=new cfully.qualified.name.DriverClass();
DriverManager.registerDriver(driver);
}

这会在 DriverManager 中注册 Driver 实现(如果有),而 DriverManager 又能够将数据库的 URL 传递给所有已注册的驱动程序,以便获取 Connection 对象。现在,我不明白...... DriverManager 类如何存储(或注册)驱动程序?这些是实现 java.sql.Driver 的类的实例,它们是对象,所以我期望 DriverManager 的实例来存储(例如,在数组或某些数据结构中)注册的驱动程序...但没有据我所知(我正在调用静态方法!)。有人可以解释一下吗?

最佳答案

这就是它的作用

public static synchronized void registerDriver(java.sql.Driver driver)
throws SQLException {
if (!initialized) {
initialize();
}

DriverInfo di = new DriverInfo();

di.driver = driver;
di.driverClass = driver.getClass();
di.driverClassName = di.driverClass.getName();

// Not Required -- drivers.addElement(di);

writeDrivers.addElement(di);
println("registerDriver: " + di);

/* update the read copy of drivers vector */
readDrivers = (java.util.Vector) writeDrivers.clone();

}

因此它会在中注册驱动程序、类和驱动程序的类名

private static java.util.Vector readDrivers = new java.util.Vector();

然后当有人getConnection(String url.....)

它将循环尝试此操作的readDrivers中的所有驱动程序

Connection result = di.driver.connect(url, info);
if (result != null) {
return (result);
}

因此,由实现 java.sql.Driver 的人来快速决定他是否能够连接到提供的 url

关于java - DriverManager.registerDriver() 静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33190198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com