gpt4 book ai didi

java - JDBC DriverManager 驱动程序选择

转载 作者:行者123 更新时间:2023-12-01 13:20:06 25 4
gpt4 key购买 nike

我有一个应用程序,其目的是支持 jdbc:hive://jdbc:hive2:// 协议(protocol)的 JDBC 连接。以下代码加载这两种协议(protocol)相应的 JDBC 驱动程序:

private void setDriverClass() ... {
...
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); // acceptsURL -> jdbc:hive://
Class.forName("org.apache.hive.jdbc.HiveDriver"); // acceptsURL -> jdbc:hive2://
}

据我了解,当调用客户端连接时,DriverManager 会调用 accepstURL() 方法来验证索引中的当前驱动程序是否可以处理该连接。 AcceptURL() 通常使用 jdbcURL.startsWith 方法来匹配字符串。

有时,由于“无效的 jdbcURL”错误,我的客户端连接未建立使用 jdbc:hive2:// 前缀。看起来 org.apache.hadoop.hive.jdbc.HiveDriver 正在接受 jdbc:hive2://前缀并抛出异常 --org.apache .hadoop.hive.jdbc.HiveDriver 显示在堆栈跟踪中,这是正确的,因为它的 AcceptURL 返回 false(正如我所验证的)。

我的问题是:除了acceptsURL之外,DriverManager还使用其他方法来选择创建连接时要使用的JDBC驱动程序吗?并且,它仅取决于DriverManager,或者底层的JDBC驱动程序需要实现除了acceptURL()和jdbc基础知识之外的支持代码。

最佳答案

DriverManager 依赖于 JDBC 规范(以及驱动程序对其的遵从性),其中指出:

The driver should return "null" if it realizes it is the wrong kind of driver to connect to the given URL. This will be common, as when the JDBC driver manager is asked to connect to a given URL it passes the URL to each loaded driver in turn.

Hive 的 JDBC 驱动程序违反了约定并抛出异常,DriverManager 将其解释为“驱动程序理解 URL,但由于某种原因无法建立连接”。如果 DriverManager 调用驱动程序的 acceptsURL() 不仅作为 getDriver(url) 的一部分,而且作为 getConnection(url) 的一部分,那就没问题了。 code> 方法,但事实并非如此。

关于java - JDBC DriverManager 驱动程序选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22104531/

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