您的位置:首页 > 数据库 > Oracle

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

2017-02-14 16:07 549 查看
文章出处:http://www.365mini.com/page/jdbc-get-oracle-date-type.htm   非常感谢

众所周知,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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐