JDBC ResultSet getDate 失去精度

Posted

技术标签:

【中文标题】JDBC ResultSet getDate 失去精度【英文标题】:JDBC ResultSet getDate losing precision 【发布时间】:2011-03-17 01:01:51 【问题描述】:

我在 ResultSet.getDate(x) 调用中失去了精度。基本上:

rs = ps.executeQuery();
rs.getDate("MODIFIED");

返回截断到 MODIFIED 是默认精度的 Oracle TIMESTAMP 字段的日期。我认为我可能缺少一些 JDBC 调整;通常 TIMESTAMP 与 DATE 兼容,但我希望不必重新定义整个表。

【问题讨论】:

【参考方案1】:

ResultSet.getDate() 返回 @987654322@,而不是 @987654323@。它被定义为一个永恒的日期。 如果您想要时间戳,请使用ResultSet.getTimestamp()

【讨论】:

自我注意 - rtfm。我认为这在其他地方也有效。 “java.sql.Date 被定义为一个永恒的日期”。那句话救了我的命。谢谢!【参考方案2】:

使用时间戳是正确的方法。 请注意,如果要使用 Liquibase,您将无法使用 Timestamp 将列设置为可为空。

我也遇到了一个问题。

【讨论】:

【参考方案3】:

您应该使用 java.sql.Timestamp 而不是 java.sql.Date。如有必要,您可以稍后将其用作 java.util.Date 对象。

rs = ps.executeQuery();
Timestamp timestamp = rs.getTimestamp("MODIFIED");

希望这会有所帮助。

【讨论】:

构造new Date 是不必要的,因为Timestamp extends Date

以上是关于JDBC ResultSet getDate 失去精度的主要内容,如果未能解决你的问题,请参考以下文章

ResultSet#getDate() 语义

连接损坏后 ResultSet 的行为

ResultSet getDate() 返回不正确和正确的日期

来自ResultSet java的getDateTime

JDBC 驱动程序在空 ResultSet 上抛出“ResultSet Closed”异常

javaWeb_JDBC_ResultSet查询操作