我可以使 jdbc 4.1 源代码级别与 jdk 1.6 兼容吗?

Posted

技术标签:

【中文标题】我可以使 jdbc 4.1 源代码级别与 jdk 1.6 兼容吗?【英文标题】:Can I make jdbc 4.1 source level compatible with jdk 1.6? 【发布时间】:2012-09-22 09:44:01 【问题描述】:

我有扩展 java.sql.Statement、java.sql.Connection 和 java.sql.DataSource 的代码。

我的兼容性目标是 java 1.6,我不想在 jdk 1.7 中使用 JDBC 4.1 引入的特定功能。

但我系统上默认安装的 jdk 是 Openjdk 7。我想坚持使用它,但我仍然想让我的代码以 1.6 为目标。

在 Eclipse 中,我将 1.6 设置为编译目标,但 jdk 坚持我在 java.sql 类中实现新方法...我创建了存根,除了抛出 UnsupportedOperationException 之外什么都不做。所以这是我的问题:

有没有办法用1.7 sdk编译1.6源代码? 如果不是,只要我不使用 jdbc 4.1 特性,我选择将新方法“实现”为 UnsupportedOperationException 是否安全? 有没有实现jdbc 4.1的连接池?

【问题讨论】:

除了默认情况下,您还有什么特别的原因不只是使用 Java 6 吗? 您认为“实现”JDBC 的连接池究竟做了什么?它只是管理连接,我看不出它与所使用的 JDBC 版本有什么关系。 @thorbjorn:嗯,事实上我在 Debian/Ubuntu 上使用默认包。碰巧打包器制作的openjdk-7-jdk也提供了java6-jdk。因此,它会在安装时创建符号链接来伪造 jdk6 环境。我宁愿不手动删除它们并安装我自己的 jdk。但如果这是唯一的解决方案,我当然会。 如果您想在 Java 7 上使用目标 1.6 进行编译,那么您还应该指定一个包含 Java 6 rt.jar 的引导类路径。当您指定目标 1.6 时,Java 7 应该会给您一个警告(至少:Oracle JDK 会)。 你可以简单地实现它来抛出 SQLFeatureNotSupportedException。 BTW:你有没有考虑过使用java.lang.reflect.Proxy 来实现它? 【参考方案1】:

JDBC4.0是针对JDK1.6的,你应该使用条件编译来产生一个JDBC4.0兼容的包。

【讨论】:

以上是关于我可以使 jdbc 4.1 源代码级别与 jdk 1.6 兼容吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 android studio 中使用 JDBC 登录级别

是否有用于 DB2 的 JDBC 4.1 驱动程序?

理解 spring 事务传播行为与数据隔离级别

java异常级别与捕获

oracle的jdbc的版本与jdk对应关系

事务和JDBC事务隔离级别