Java 如何确定JDBC驱动程序是否为类型4?

Java 如何确定JDBC驱动程序是否为类型4?,java,jdbc,Java,Jdbc,我们有一个运行在Java1.6上的应用程序,它能够通过定制插件与RDBMS系统进行通信。我们不关心客户拥有什么类型的数据库,但出于各种原因,我们确实决定需要一个类型4驱动程序 我想通过编程确定驱动程序是否为类型4,这样我就可以立即拒绝它,而不是花时间调试问题,然后才发现驱动程序不是类型4。因为我不知道供应商是什么,我不能只看版本号。我已经研究了Driver.jdbccomplible(),但这不是驱动程序为类型4的必要条件。我还研究了创建一个连接,然后对其进行反射,看看它是否实现了某些方法,如i

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


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

编辑:看起来我说的是不同的东西

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

编辑:嗯,这似乎应该是正确的,但是。。。Oracle似乎没有正确地实现它,因为我得到了JDBC版本的11.2。这和我在驱动程序版本中得到的一样。谢谢甲骨文


如果您不能指望为此专门设计的方法,那么在我看来,您唯一的选择就是调用
Connection
上的
createClob()
等方法,并捕获
NoSuchMethodException
。主要/次要版本表示支持的jdbc版本,而不是驱动程序类型。例如,jdbc 3中有一个类型4驱动程序,在jdbc 3中调用getJDBCMajorVersion()不会返回4@Pangea:我觉得问题是关于JDBC版本而不是类型,但我可能错了。谢谢各位的回答。实际上,我关心的是类型,而不是JDBC版本。就像前面提到的Pangea一样,您可以有一个实现JDBC3.0规范而不是4.0规范的Type4驱动程序,反之亦然。我们关心的是类型4驱动程序附带的语义(即本机协议)。尽管我们需要Java 1.6,但驱动程序与Java 1.6兼容也很重要(我知道有些驱动程序是用JDK6之前的版本编译的,与JDK6不兼容。我也不确定如何发现这一点)。但最重要的是驱动程序类型。@JT-3:我从你说的一个选项可能是检查
连接
是否有
isValid
方法的那部分中得到了你谈论版本的印象,这只与我认为的版本有关。我认为没有办法。