java.util.Date
,java.util.Timetamp
似乎对许多人造成了极大的困惑。在StackOverflow中有很多问题,不幸的是我的问题有点扭曲。
有2个JDBC api。他们应该如何表现? RDBMS之间是否存在任何一致性?
ResultSet.getTimestamp("dateColumn")
ResultSet.getTimestamp("dateColumn", Calendar.getInstance(tz))
如果有人对Sybase有所了解,请您分享一下您的经验吗?
答案 0 :(得分:25)
首先,您将java.util
与java.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.Date
和java.util.Calendar
完全相同。这将映射到SQL TIMESTAMP
或DATETIME
字段类型。
对于时区,当数据库不存储时区信息时,您需要它(因此,所有时间戳都以UTC(GMT)格式存储)。然后,您可以传递Calendar
,其中包含有关当前时区的信息,以便JDBC驱动程序可以将UTC时间戳调整为符合时区的时间戳。如果它是例如GMT + 1,则JDBC驱动程序将在返回之前向时间戳添加一小时。