ojdbc14.jar与ojdbc6.jar

Omn*_*ent 32 java oracle jdbc

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

ENV: -

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
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 40

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

  • JDK 6也已达到其支持生命的终点.目前的标准是JDK 7. (4认同)
  • 有一天人们会说"它甚至没有lambda" (4认同)
  • 是的,我在三年后添加了新的信息.这不是纠正; 这是一个更新. (3认同)

Pas*_*ent 26

实际上,ojdbc14.jar并没有真正说明驱动程序的真实版本(参见JDBC驱动程序下载),除了它早于Oracle 11g.在这种情况下,您应该提供确切的版本.

无论如何,我想你会在DATE和TIMESTAMP的内容中找到一些解释吗?简而言之,他们改变了9.2驱动程序的行为,然后又改变了11.1驱动程序中的行为.

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


Ara*_*yan 10

我有同样的问题!

在oracle站点链接文本中找到以下 内容

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

如果由于某种原因,您的应用程序对此更改非常敏感,并且您只需要具有9i-10g行为,则可以设置连接属性.将mapDateToTimestamp设置为false,驱动程序将恢复为默认的9i-10g行为并将DATE映射到Date.