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

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

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

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

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

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