代码之家  ›  专栏  ›  技术社区  ›  ZZ Coder

如何使JDBC驱动程序在Java 5和6中工作?

  •  4
  • ZZ Coder  · 技术社区  · 15 年前

    Java 6附带JDBC 4,它不与Java版本的JDBC向后兼容。

    我们有一个JDBC驱动程序,它必须同时支持Java 5和Java 6。如果我在驱动程序中实现新的接口,它在Java 5中不起作用,因为接口也使用新的类。所以我们有两个版本的驱动程序。有没有一种方法既可以同时使用Java 5和6呢?

    1 回复  |  直到 15 年前
        1
  •  8
  •   Brad Cupit Regan    15 年前

    如果您实现了JDBC 3驱动程序,而您的客户端在Java 6中运行,则如果调用任何新的JDBC 4方法,它们将出错。这是罕见的,因为这些新方法不经常使用,但如果你想证明自己是傻瓜,下面的解决方案(这是一个黑客)应该能做到这一点:

    1. 用Java 5编译(如果用Java 6编译并运行在Java 5中,则会得到版本错配错误)
    2. 实现正常的JDBC 3驱动程序,但也包括新JDBC 4方法的实现(注意:这将导致编译错误,因为Java 5不定义像Java.SQL.NCROB这样的类型)。
    3. 在一个单独的项目中创建一个新的JDBC 4接口(如Java.sql,NClob)的精确副本(现在有2个项目:原来的一个和这个项目)
    4. 将两个项目一起编译,并为每个项目制作一个单独的JAR:
      • 您的JDBC驱动程序实现(保留这个JAR)
      • 新的JDBC4.0接口(丢弃这个JAR)

    我们可以丢弃JDBC4.0接口JAR,因为:

    • 在Java 6中,定义了新的JDBC 4接口。
    • 在Java 5中,JDBC 3接口不定义新方法(如连接.CREATEN()),因此您的用户不会调用它们。

    唯一的潜在问题可能是Java 5类加载器。如果找不到新的JDBC 4接口(比如Java.sql,NClob),它可能会失败。我不认为在Sun JVM中会发生这种情况,除非调用一个返回这些新接口之一的方法,所以应该是好的。如果我错了,这是一个问题,在Java 5中运行时,只需将废弃的jar(定义新的JDBC 4接口的一个)放在类路径上。