zoukankan      html  css  js  c++  java
  • JDBC 日期精度丢失

    在使用"两间瓦房"框架时遇见一个问题,在oracle数据库中插入date类型的数据,出现精度丢失问题,具体表现为:数据库中存储为"2012-06-14",而"HH:mm:ss"部分却不见了.跟踪源程序发现问题出在了如下代码上:

     1 case java.sql.Types.TIMESTAMP:
     2   java.util.Date d;
     3    if (val.length() > 10) {
     4      d = sf.parse(val);
     5    } else {
     6      d = sfs.parse(val);
     7    }
     8    long l = d.getTime();
     9    java.sql.Timestamp ts = new java.sql.Timestamp(l);
    10    st.setTimestamp(iParam, ts);
    11    break;
    12case java.sql.Types.TIME:
    13    if (val.length() > 10) {
    14       d = sf.parse(val);
    15    } else {
    16      d = sfs.parse(val);
    17    }
    18    l = d.getTime();
    19    java.sql.Time stm = new java.sql.Time(l);
    20    st.setTime(iParam, stm);
    21    break;
    22case java.sql.Types.DATE:
    23    if (val.length() > 10) {
    24       d = sf.parse(val);
    25     } else {
    26       d = sfs.parse(val);
    27     }
    28     l = d.getTime();
    29    java.sql.Date sd = new java.sql.Date(l);
    30    st.setDate(iParam, sd);
    37  break;

    上述代码中 红色背景的代码,在转换时 只保留了日期(yyyy-MM-dd),而丢失了时间(HH:mm:ss)内容.这是导致精度丢失的罪魁祸首.

    既然发现问题,我们就要解决问题,可以用timestamp类型 来取代date,可以参考上述蓝色背景的代码片段.

    ---------------------------------------------------------------------------------------------------------------------

    下面根据上述问题来说一点理论知识:

    java.sql 定义的时间类型包含三个类,date,time和timestamp.分别用来表示日期(无时间信息,eg: yyyy-mm-dd),时间(只处理时间,无日期部分, eg:hh:mm:ss)和时间戳(精确到纳秒级别)在它们都继承自java.util.date。

  • 相关阅读:
    精通正则表达式(JavaScript)
    Go知识点记录
    多线程揭秘
    Python test
    ELinq+T4模版引擎制作多文件实体代码生成器
    浏览器内核
    MongoDb的增删改查
    LINQ执行表达式
    ASP.NET MVC3 读书笔记四(数据注解和验证)
    C#默认以管理员身份运行程序
  • 原文地址:https://www.cnblogs.com/shihujiang/p/2548981.html
Copyright © 2011-2022 走看看