zoukankan      html  css  js  c++  java
  • Oracle9或11使用了Oracle10的驱动引起的时间丢失

    Oracle中在DDL的时候,列类型date是包括时间+时间的,并且精确到毫秒. 不存在仅仅是日期(不包括时间)的列类型,而列类型timestamp可以认为是精度更高的date类型,能精确到纳秒(在windows操作系统只能精确到1000纳秒)。

    Java中的Date类有二种,一种是带时间的java.util.Date,一种是不带时间仅有日期的java.sql.Date.还有一种是既带时间又带日期的java.sql.Timestamp.

    一.java写oracle

    1.java写入oracle的date列时:

    java.util.Date,java.sql.Timestamp二种类型不仅会写入日期还会写入时间.

    java.sql.Date,Oracle只会写入日志,时间部分会使用默认的00:00:00来存储.

    2.java写入oracle的timestamp列时:

    应该使用java.sql.Timestamp

    二.oracle读到java

    1.如果是date类型的列(比较麻烦,如果使用了现有的驱动ojdbc14, 在将date类型转换成java的date类时,会使用java.util.Date的继承类java.sql.Date,而不是java.util.Date,由于前者不会保留时间部分,只有日期.导致查询出来的时间部分丢失.)

    java如果使用了错误的驱动,有三种解决办法:

    1)解决的办法: (1).将date类型改为timestamp类型(不推荐使用). (2).在datasource的连接参数里设置oracle.jdbc.V8Compatible=true;(兼容老的驱动程序,由于老的驱动是正确转换的,这样会将date列正确转换成java.util.Date

    2)将date列类型转成timestamp类型. Oracle的所有驱动都会将timestamp转换成java.sql.Timestamp. 肯定不会丢失时间部分

    

    参考文章:

    http://www.blogjava.net/midea0978/archive/2008/06/13/207655.html


  • 相关阅读:
    大话领域驱动
    c#之循环效率
    编程思想之——"人是活的,程序是死的"
    C#之系统异常处理机制
    EF操作扩展之async
    C#提供APP接口之JSON差异
    EF操作MySql
    WCF 消息压缩性能问题及解决方法
    [NoSQL]-Elasticsearch 7.9
    [Linux]-Debian10基础使用
  • 原文地址:https://www.cnblogs.com/highriver/p/2020358.html
Copyright © 2011-2022 走看看