2010-04-06 197 views
9

java.util.Date,java.util.Timetamp似乎对很多人造成很大的困惑。在StackOverflow中有很多问题,不幸的是我的问题有点扭曲。ResultSet.getTimestamp(“date”)vs ResultSet.getTimestamp(“date”,Calendar.getInstance(tz))

有2个JDBC api。他们应该如何执行?关系数据库中有没有一致性?

ResultSet.getTimestamp("dateColumn") 
ResultSet.getTimestamp("dateColumn", Calendar.getInstance(tz)) 

如果有人在Sybase中有知识,请分享您的经验吗?

回答

23

首先,你很困惑java.utiljava.sql。当使用PreparedStatement#setDate()ResultSet#getDate()时,您需要java.sql.Date。类似地,当使用PreparedStatement#setTimestamp()ResultSet#getTimestamp()时,您需要java.sql.Timestamp

其次,重要的是要明白,java.sql.Date只代表日期(年,月,日),无所谓或更多。这将被映射到一个SQL DATE字段类型。 java.sql.Timestamp代表时间戳(年,月,日,小时,分钟,秒,毫秒),与java.util.Datejava.util.Calendar一样。这将被映射到SQL TIMESTAMPDATETIME字段类型。

至于时区,当数据库不存储时区信息时(因此,所有时间戳均以UTC(GMT)存储)时,您需要它。然后您可以传递一个Calendar,其中包含有关当前时区的信息,以便JDBC驱动程序可以将UTC时间戳调整为符合时区的时间戳。如果它是例如GMT + 1,那么JDBC驱动程序将在返回之前将一个小时添加到时间戳。

+0

很好的答案。有关JDBC中各种Date类的变体的更多信息,请参考我的帖子:http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date/2306051# 2306051 – Esko 2010-04-06 13:17:38