ORACLE的JDBC DRIVER的GETDATE存在BUG.
来源:互联网 发布:淘宝欢乐逛在哪里 编辑:程序博客网 时间:2024/06/05 18:38
问题描述:
在做度量统计的程序中, 当计算度量A101-KM从28/02/1979 08:00到当前时间的时候,出现了一个很奇怪的现象。当在PL/SQL客户端查询时发现日期是:1987-4-12, 1990-4-15 ,而通过HIBERNATE查询得到的却是1987-4-11, 1990-4-14 。
解决途径一:
看到这个现象觉得很奇怪,开始以为是由于程序中的复杂操作造成这个现象,但是经过检查发现并不是这样, 因为直接通过JDBC操作ORACLE DB获取的数据就是如此。于是发现应该是ORACLE的JDBC DRIVER有些小BUG, 估计HIBERNATE 是用的GETDATE去获取RESULTSET中的日期, 但是数据库默认的时区设置和我们机器上的时区是不同的, 于是便出现了这种差异。
用JAVA(TimeZone.getDefault().getID())去获取是Asia/Shanghai, 而用SQL(select SESSIONTIMEZONE from dual, select DBTIMEZONE from dual;)去取却是GMT, 不知道是不是这样? 本人还是有些疑问。
解决方法:
1) 通过将DATABASE中相应字段改为TIMESTAMP, 然后将1987-4-12 设为1987-4-12 01:00:00, 在用JAVA获取返回就是1987-4-12 01:00:00, 注意:如果设成:1987-4-12 00:30:00, 返回就是1987-4-11 23:30:00
显然这是因为时区不一致造成的, 即使将所有这些DATE设成1点后, 也不能保证以后别的机器的时区相差仅仅一个小时。
2) 通过在应用程序中设置一个默认的时区,TimeZone.setDefault(TimeZone.getTimeZone(“GMT”);,这个可以配置, 也许这样会更好些。
解决途径二:
由于对使用了很久的Oracle JDBC Driver 很信任,认为 Driver不会出现问题,但还是报着试试看的想法写了一段直接用JDBC 存取数据的代码,令人惊讶的是这个日期问题依旧, 用 ResultSet的getDate方法和getString方法取出的数据就是不同的,用getString取出的数据是 1940-6-3 ,是正确的,用getDate取出的日期是1940-6-2是错误的, 问题终于找到了,去Oracle网站找新的驱动(其实我们用的驱动也不是很旧),浏览Oracle的网站才发现,Oracle10g的不同的小版本如:Oracle 10.2.0.1 至 Oracle 10.2.0.4 都提供了不同的驱动程序。
针对不同的数据库版本下载对应的驱动,问题解决! http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
- ORACLE的JDBC DRIVER的GETDATE存在BUG.
- ORACLE的JDBC DRIVER的GETDATE存在BUG.
- Oracle JDBC Driver 深藏的 Bug
- oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver的区别
- 程序包oracle.jdbc.driver不存在 的解决办法
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver ' —— 一个坑爹的BUG
- oracle.jdbc.driver.PhysicalConnection 看JDBC的参数
- oracle连接驱动jdbc的一个bug
- Oracle JDBC 连接时的一个BUG
- jdbc driver 的作用
- sqlserver的jdbc driver
- Maven中出现Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'的解决办法
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver异常的解决办法
- wechat4J存在的BUG
- Oracle JDBC实现存在BUG(ResultSet::setFetchSize())?
- sybase jdbc driver 的小毛病
- JDBC Driver 的系统要求
- WINCE 下的FAL(flash abstraction layer)——转载
- 数据整合与BI应用的元数据标准化
- 关于ADODB.Stream 错误 800a0bbc 写入文件失败
- oracle copy使用
- 30个精典算法
- ORACLE的JDBC DRIVER的GETDATE存在BUG.
- C盘根目录文件解析——必须清楚的20个文件(文件夹)
- SMT表面安装元器件介绍
- jsp页面白屏--中文乱码
- linux sqlloder crontab使用
- 印刷电路内埋构件的应用前景
- 利用xml在指定分隔符的情况下获取指定数据项的指定位置的串
- SMT有关的技术基础知识集
- Discuz.NET搭建常见问题