2011-02-10 236 views
3

我们有一个运行在Java 1.6上的应用程序,并且可以通过定制插件与RDBMS系统进行交流。我们不在乎客户拥有什么类型的数据库,但是我们确实因为各种原因决定需要Type 4驱动程序。如何确定JDBC驱动程序是否为Type 4?

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

+1

我不认为有一种方法。 – 2011-02-10 18:32:59

回答

0

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

通过Connection.getMetaData()获取DatabaseMetaData并检查getJDBCMajorVersion()> = 4,您可能需要调用该方法时,因为只有一个JDBC驱动程序3.0+将它赶NoSuchMethodException

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

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

+0

主要/次要版本代表受支持的jdbc版本,而不是驱动程序类型。例如,在jdbc 3中有一个类型4驱动程序,并在jdbc 3中调用getJDBCMajorVersion()不返回4 – 2011-02-10 18:32:26