ResultSet.getTimestamp(“date”)vs ResultSet.getTimestamp(“date”,Calendar.getInstance(tz))

时间:2010-04-06 12:17:27

标签: java oracle jdbc sybase

java.util.Datejava.util.Timetamp似乎对许多人造成了极大的困惑。在StackOverflow中有很多问题,不幸的是我的问题有点扭曲。

有2个JDBC api。他们应该如何表现? RDBMS之间是否存在任何一致性?

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

如果有人对Sybase有所了解,请您分享一下您的经验吗?

1 个答案:

答案 0 :(得分:25)

首先,您将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驱动程序将在返回之前向时间戳添加一小时。