• 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


  • 相关阅读:
    [LeetCode]Sort List
    [LeetCode]Single Number II
    合并两个排序的列表
    翻转链表
    链表中倒数第k个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/highriver/p/2020358.html
Copyright © 2020-2023  润新知