• 解决JDBC读取Oracle DATE类型数据没有时分秒的问题
  • 瓦缸没米 发表于 2015/11/14 11:11:00 | 分类标签: oracle数据库 JDBC读取数据
  • 众所周知,Oracle中的日期类型有Date,Timestamp等多种类型,当我们使用ResultSet.getDate()来获取上述类型的数据时,即使数据库中保存的数据包含时分秒的信息,但是获取出来的数据仍然不会包含时分秒的信息。哪怕我们对其进行格式转换,得到的也最多是yyyy-MM-dd 00:00:00。

    Oracle的Date类型对应Java中的java.sql.Date,Timestamp类型对应java.sql.Timestamp,java.sql.Date和java.sql.Timestamp均属于java.util.Date的子类。
    Oracle类型Java类型getDate()getObject()getTimestamp()
    Datejava.sql.Datey-M-dy-M-dy-M-d H-i-s
    Timestampjava.sql.TimestampN/Ay-M-d H-i-s msy-M-d H-i-s ms
    Oracle的驱动在处理Date类型的数据时,只要我们使用ResultSet.getDate()来获取,都会忽略掉时分秒等信息,ResultSet.getObject()也是如此,因为当我们使用ResultSet.getObject()来获取Date类型的数据时,默认返回的仍然是java.sql.Date类型的数据。

    如果我们想要获取Oracle Date类型中包含的时分秒等信息,则需要使用ResultSet.getTimestamp()来获取。

    对于Oracle中Timestamp类型的数据,如果我们使用的是ResultSet.getObject()来获取,则默认返回的oracle.sql.Timestamp类型的数据。值得注意的是,该类型并不是java.util.Date的子类,也没有重写toString()方法。因此对于Timestamp类型的数据必须使用ResultSet.getTimestamp()方法来获取。

    最后,我们不建议在Oracle Date类型的字段中保存时分秒等信息,如果需要保存该部分信息,请使用Timestamp类型,这样我们可以在Java中编写如下代码来获取Oracle日期、时间戳类型的数据。

    int type = rsmd.getColumnType(i);
    //循环获取ResultSet中的数据的部分代码
    switch (type) {
    case Types.TIMESTAMP: // 如果是时间戳类型
        value = rs.getTimestamp(i);
        break;
    case Types.TIME: // 如果是时间类型
        value = rs.getTime(i);
        break;
    default: //日期类型可以使用getObject()来获取
        value = rs.getObject(i);
        break;
    }
    map.put(rsmd.getColumnLabel(i), value);
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:瓦缸没米
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮