当前位置: 首页 > 技术随笔 > JDBC读取Oracle DATE类型数据没有时分秒

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

众所周知,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()
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);
27 3
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。

JDBC
Oracle