ojdbc14.jar 与 ojdbc6.jar

Posted

技术标签:

【中文标题】ojdbc14.jar 与 ojdbc6.jar【英文标题】:ojdbc14.jar vs. ojdbc6.jar 【发布时间】:2011-03-13 16:26:48 【问题描述】:

我注意到以下差异,但没有在任何地方看到它的记录。我想知道其他人是否注意到了同样的事情,或者可以向我指出一些证明相同的文件。

环境:-

Oracle 11g, JDK 1.6, iBatis, PL/SQL

场景:-

ojdbc14.jar:如果 pl/sql 返回 DATE 类型的变量,我尝试将其放入 java.sql.Date 变量中,那么一切正常。示例:

Date annualDate = (Date) map.get("exam_date");

ojdbc6.jar:如果 pl/sql 返回一个 DATE 类型的变量,并且我尝试将其放入 java.sql.Date 变量中,那么我会得到一个异常:

java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date

【问题讨论】:

你不能在 result_set 上调用 getDate('exam_date') 并获得正确的日期而不是时间戳吗? 从 ojdbc14 升级到 ojdbc6 后,我遇到了类似类型的问题。如果有人能调查这个问题并为我提供答案***.com/questions/46543694/…,我将不胜感激 【参考方案1】:

这些驱动程序名称中的“14”和“6”指的是为它们编写的 JVM。如果您仍在使用 JDK 1.4,我会说您遇到了严重的问题并且需要升级。 JDK 1.4 早已过了其有用的支持生命周期。它甚至没有泛型! JDK 6 u21 是 Oracle/Sun 的当前生产标准。如果您还没有,我建议您切换到它。

【讨论】:

JDK 6 也已达到其支持生命周期的终点。当前标准是 JDK 7。 @duffymo 他在 4 年前说过,当时他是对的(我说的是在 java8 时代的开始)。 对,三年后我添加了新信息。这不是更正;这是一个更新。 有一天人们会说“它甚至没有 lambda”【参考方案2】:

实际上,ojdbc14.jar 并没有真正说明驱动程序的真实版本(请参阅JDBC Driver Downloads),只是它早于 Oracle 11g。在这种情况下,您应该提供准确的版本。

无论如何,我想你会在What is going on with DATE and TIMESTAMP? 中找到一些解释。简而言之,他们改变了 9.2 驱动程序中的行为,然后又改变了 11.1 驱动程序中的行为。

这可以解释您遇到的差异(我建议使用最新版本,即 11.2 驱动程序)。

【讨论】:

Oracle JDBC 驱动程序命名是非常可悲的,正如这所指出的那样。自从互联网时代以来,我们已经超越了 8.3 文件名的限制。我有两个不同的 ojdbc14.jar 副本。一个具有 DRIVER_VERSION 10.2.0.2.0 的版本于 2006 年 1 月 24 日构建,而 10.2.0.1.0XE 则在一天后构建,但代码存在许多差异。太糟糕了,它们没有命名为 ojdbc-jdk1.4-10.2.0.2.0.jar 和 ojdbc-jdk1.4-10.2.0.1.0XE.jar(或 jdk4 而不是 1.4)。【参考方案3】:

我也有同样的问题!

在 oracle 站点中找到以下内容 link text

如上所述,11.1 驱动程序在读取数据库时默认将 SQL DATE 转换为时间戳。这始终是正确的做法,而 9i 中的更改是一个错误。 11.1 驱动程序已恢复为正确行为。即使您没有在应用程序中设置 V8Compatible,在大多数情况下您也不应该看到任何行为差异。如果您使用 getObject 读取 DATE 列,您可能会注意到不同之处。结果将是时间戳而不是日期。由于 Timestamp 是 Date 的子类,这通常不是问题。您可能会注意到不同之处在于您是否依赖从 DATE 到 Date 的转换来截断时间组件,或者您是否对值执行 toString。否则更改应该是透明的。

如果由于某种原因您的应用程序对这种更改非常敏感,并且您必须具有 9i-10g 行为,那么您可以设置一个连接属性。将 mapDateToTimestamp 设置为 false,驱动程序将恢复到默认的 9i-10g 行为并将 DATE 映射到 Date。

【讨论】:

【参考方案4】:

此外,从 ojdbc14 到 ojdbc6,几种类型(例如,OracleResultSetOracleStatement)从包 oracle.jdbc.driver 移动到 oracle.jdbc

【讨论】:

以上是关于ojdbc14.jar 与 ojdbc6.jar的主要内容,如果未能解决你的问题,请参考以下文章

ojdbc14.jar 与ojdbc6.jar的区别

Oracle驱动classes12.jar 与ojdbc14.jar的区别

我们可以将 ojdbc14.jar、classes12.jar 与 Oracle 12c 和 jdk1.5 一起使用吗

我们可以在 Oracle 11g 和 jdk1.5 中使用 ojdbc14.jar

maven项目pom.xml导入ojdbc14 jar失败

Oracle JDBC:驱动版本区别与区分 [转]