【问题标题】:How can I determine whether a JDBC driver is Type 4?如何确定 JDBC 驱动程序是否为 Type 4?
【发布时间】:2011-02-10 17:24:40
【问题描述】:

我们有一个在 Java 1.6 上运行的应用程序,并且能够通过自定义插件与 RDBMS 系统通信。我们不关心客户拥有什么类型的数据库,但出于各种原因,我们确实决定需要 Type 4 驱动程序。

我想以编程方式确定驱动程序是否为 4 类驱动程序,以便我可以立即拒绝它,而不是花时间调试问题后才发现驱动程序不是 4 类驱动程序。因为我不知道供应商是什么是,我不能只看版本号。我查看了 Driver.jdbcCompliant() 但这不是驱动程序为 Type 4 的必要条件。我还查看了创建一个 Connection 然后对其进行反射以查看它是否实现了某些方法,例如 isValid() ,但我再次意识到这并不一定保证驱动程序是 4 型。有什么建议吗?

【问题讨论】:

  • 我认为没有办法。

标签: java jdbc


【解决方案1】:

编辑:好像我在谈论一些不同的东西!

通过Connection.getMetaData() 获取DatabaseMetaData 并检查getJDBCMajorVersion() >= 4。您可能希望在调用该方法时捕获NoSuchMethodException,因为只有JDBC 3.0+ 驱动程序才会拥有它。

编辑: 嗯,这看起来应该是正确的,但是...... Oracle 似乎没有正确实现它,因为我得到了 11.2 的 JDBC 版本。这与我在驱动程序版本中得到的相同。感谢甲骨文!

如果您不能指望专门为此设计的方法,在我看来,您唯一的选择是在Connection 上调用createClob() 之类的方法并捕获NoSuchMethodException。或者为特定供应商添加特殊处理。

【讨论】:

  • 主要/次要版本代表受支持的 jdbc 版本,而不是驱动程序类型。例如在 jdbc 3 中有一个类型 4 驱动程序,在 jdbc 3 中调用 getJDBCMajorVersion() 不会返回 4
  • @Pangea:我觉得问题是关于 JDBC 版本而不是类型,但我可能是错的。
  • 感谢大家的回复。我实际上确实关心 Type 而不是 JDBC 版本。就像提到的 Pangea 一样,您可以拥有一个实现 JDBC 3.0 规范而不是 4.0 规范的 Type 4 驱动程序,反之亦然。我们关心的是 Type 4 驱动程序附带的语义(即本机协议)。虽然由于我们需要 Java 1.6,但驱动程序与 Java 1.6 兼容也很重要(我知道一些驱动程序是用 pre-JDK6 编译的,与 JDK6 不兼容。我也不知道如何发现这一点) .但最重要的是驱动类型。
  • @JT-3:我从您所说的一个选项可能是检查Connection 是否具有isValid 方法的部分中得到您在谈论版本的印象,这只会是与我认为的版本有关。
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多