JDBC读取Oracle DATE类型数据没有时分秒

本文介绍如何正确处理Oracle数据库中的Date和Timestamp类型,在Java应用程序中获取这些类型数据的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章出处:http://www.365mini.com/page/jdbc-get-oracle-date-type.htm   非常感谢


众所周知,Oracle中的日期类型有DateTimestamp等多种类型,当我们使用ResultSet.getDate()来获取上述类型的数据时,即使数据库中保存的数据包含时分秒的信息,但是获取出来的数据仍然不会包含时分秒的信息。哪怕我们对其进行格式转换,得到的也最多是yyyy-MM-dd 00:00:00

Oracle的Date类型对应Java中的java.sql.DateTimestamp类型对应java.sql.Timestampjava.sql.Datejava.sql.Timestamp均属于java.util.Date的子类。

Oracle类型 Java类型 getDate() getObject() getTimestamp()
Date java.sql.Date y-M-d y-M-d y-M-d H-i-s
Timestamp java.sql.Timestamp N/A y-M-d H-i-s ms y-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日期、时间戳类型的数据。

  1. int type = rsmd.getColumnType(i);
  2. //循环获取ResultSet中的数据的部分代码
  3. switch (type) {
  4. case Types.TIMESTAMP: // 如果是时间戳类型
  5.     value = rs.getTimestamp(i);
  6.     break;
  7. case Types.TIME: // 如果是时间类型
  8.     value = rs.getTime(i);
  9.     break;
  10. default: //日期类型可以使用getObject()来获取
  11.     value = rs.getObject(i);
  12.     break;
  13. }
  14. map.put(rsmd.getColumnLabel(i), value);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值