【发布时间】:2014-08-01 00:58:05
【问题描述】:
我有一个应用程序,其目的是支持jdbc:hive:// 和jdbc:hive2:// 协议的JDBC 连接。以下代码为两种协议加载了相应的 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 方法来匹配字符串。
有时我的客户端连接使用 jdbc:hive2:// 前缀未建立,因为“无效 jdbcURL”错误。似乎org.apache.hadoop.hive.jdbc.HiveDriver 正在接受jdbc:hive2:// 前缀并抛出异常--org.apache.hadoop.hive.jdbc.HiveDriver 显示在堆栈跟踪中--,这是正确的,因为它的acceptURL 返回错误(正如我已经验证的那样)。
我的问题是:除了 acceptURL 之外,DriverManager 是否还有其他方法可以在创建连接时选择要使用的 JDBC 驱动程序?而且,它完全依赖于DriverManager或者底层的JDBC驱动除了acceptURL()和jdbc的基础之外还需要实现支持代码。
【问题讨论】:
-
这很模糊。您能否告诉我们您使用的是什么驱动程序以及遇到了什么异常?
-
嗨@GiovanniBotta,我已经更新了描述。因为我正在研究不同的 JDBC 驱动程序,所以我使用了泛型。