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


  • 相关阅读:
    传真机换色带
    系统无法安装 OfficeControl.ocx 控件如何解决
    体系结构
    WebOffice 插件
    ArcMAP定义投影坐标
    如何在AutoCAD中将卫星底图变为有坐标参考信息的
    AutoCAD中导入图片
    CGCS2000坐标系与其他坐标系间的差异和转换方法
    FTP服务器(SOCKET)返回异常 500 Command not understood
    Java微信公众平台开发--番外篇,对GlobalConstants文件的补充
  • 原文地址:https://www.cnblogs.com/highriver/p/2020358.html
Copyright © 2011-2022 走看看