Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ojdbc14.jar与ojdbc6.jar_Java_Oracle_Jdbc - Fatal编程技术网

Java ojdbc14.jar与ojdbc6.jar

Java ojdbc14.jar与ojdbc6.jar,java,oracle,jdbc,Java,Oracle,Jdbc,我注意到了以下差异,但没有在任何地方看到记录。我想知道是否其他人也注意到了同样的事情,或者可以给我指一些证明同样的文档 环境:- oracle11g、jdk1.6、iBatis、PL/SQL 情景:- ojdbc14.jar:如果pl/sql返回类型为DATE的变量,我尝试将其放入java.sql.DATE变量中,则一切正常。例如: dateannualdate=(Date)map.get(“考试日期”) ojdbc6.jar:如果pl/sql返回类型为DATE的变量,并且我尝试将其放入java

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

环境:-

oracle11g、jdk1.6、iBatis、PL/SQL

情景:-

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

dateannualdate=(Date)map.get(“考试日期”)

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

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

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

总之,我想你会找到一些解释,他们改变了9.2驱动程序中的行为,然后又改变了11.1驱动程序中的行为

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

这些驱动程序名称中的“14”和“6”指的是它们为之编写的JVM。如果您仍然使用JDK1.4,我会说您有一个严重的问题,需要升级。JDK1.4已经超过了它的有用支持寿命。它甚至没有泛型!JDK 6 u21是Oracle/Sun当前的生产标准。如果你还没有,我建议你换成它。

我也有同样的问题

在oracle站点中找到以下内容

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


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

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

你不能在结果集上调用getDate(“考试日期”),并获得正确的日期而不是时间戳吗?从ojdbc14升级到ojdbc6后,我遇到了类似的问题。如果有人能调查这个问题并给我一个JDK 6已经到了它的支持期的答案,我将不胜感激。当前的标准是JDK 7。@duffymo他在4年前说的,当时他是对的(我在java8时代开始时说的)。是的,三年后我添加了新信息。这不是一种纠正;这是一个更新。总有一天,人们会说“它甚至没有lambda”Oracle JDBC驱动程序命名是非常悲哀的,正如本文所指出的。在互联网时代,我们已经超越了8.3文件名的限制。我有两个不同的ojdbc14.jar副本。2006年1月24日构建的DRIVER_版本为10.2.0.2.0,一天后构建的版本为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)。