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


  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/highriver/p/2020358.html
Copyright © 2011-2022 走看看