在从 Postgres 或 Oracle 检索时间戳时(我们称之为 startDate
),使用 resultSet.getString("startDate")
调用或 resultSet.getTimestamp(“开始日期”)
?
目前我正在使用 resultSet.getString("startDate")
并且它工作正常,但我想到使用 getTimestamp()
可能是更好的做法.
是否有既定的最佳实践?对时间戳使用 ResultSet.getString()
是否会产生任何意外后果?
最佳答案
Is it better to use ResultSet.getString() or ResultSet.getTimestamp() to get a timestamp?
都不是。
获取日期时间对象比获取字符串更好,因为它可以更好地表示事物的含义和含义,并且应该更适合 Java 程序中的进一步操作。
同时,使用 java.time 中的现代日期时间类比使用老式 Timestamp
类要好得多。后者存在相当大的设计问题,长期以来一直被认为是过时的。
JDBC 驱动程序略有不同,但看看您是否可以获得正确的时间,例如 Instant
、OffsetDateTime
,或者如果其他所有方法都失败,则使用 结果集中的 >LocalDateTime
。在所有情况下都使用两个参数的 getObject
方法。例如:
Instant instant = resultSet.getObject("startDate", Instant.class);
JDBC 4.2指定应以这种方式支持 java.time 类。我相信当前所有 SQL 数据库引擎都具有 JDBC 4.2 兼容驱动程序。
仅当您无法使用 Java 8 或更高版本时,才需要在代码中获取 Timestamp
。接下来使用 ThreeTen-Backport 中的 java.time 类版本并使用 DateTimeUtils
ThreeTen-Backport 中的类用于转换您的 Timestamp
,最好转换为 Instant
,但如果由于时区问题而恰好给您提供了错误的即时信息,则使用 本地日期时间
。示例:
Instant instant =
DateTimeUtils.toInstant(
resultSet.getTimestamp("startDate")
)
;
关于java - 使用 ResultSet.getString() 还是 ResultSet.getTimestamp() 来获取时间戳更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659344/