【问题标题】:ResultSet.getTimestamp("date") vs ResultSet.getTimestamp("date", Calendar.getInstance(tz))ResultSet.getTimestamp("date") 与 ResultSet.getTimestamp("date", Calendar.getInstance(tz))
【发布时间】:2011-02-04 19:05:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java oracle jdbc sybase


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2010-09-26
    • 2021-01-13
    • 2015-12-03
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多