使用resultset.getstring()或resultset.gettimestamp()获取时间戳更好吗?

xpszyzbs  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(320)

在从postgres或oracle检索时间戳时——我们称之为 startDate --用这个更好吗 resultSet.getString("startDate") 呼叫或 resultSet.getTimestamp("startDate") ?
目前我正在使用 resultSet.getString("startDate") 它工作的很好,但我想它可能是更好的实践使用 getTimestamp() .
是否有既定的最佳实践?使用会有什么意想不到的后果吗 ResultSet.getString() 在时间戳上?

jaxagkaj

jaxagkaj1#

我将使用resultset.gettimestamp()。然后您的数据类型从代码正确Map到数据库。如果你愿意的话,你可以把结果转换成一个字符串。我不认为调用resultset.getstring()需要花费时间,但一般来说,检索正确的数据类型更合适。

92vpleto

92vpleto2#

使用resultset.getstring()或resultset.gettimestamp()获取时间戳更好吗?
都不是。
得到一个date-time对象比得到一个string更好,因为它能更好地表示事物的性质和含义,而且它应该更好地用于java程序中的进一步操作。
同时,使用java.time中的现代日期时间类比使用老式的日期时间类要好得多 Timestamp 班级。后者有相当大的设计问题,长期以来被认为是过时的。
jdbc驱动程序有点不同,但是看看您是否可以作为 Instant ,安 OffsetDateTime 或者如果其他都失败了 LocalDateTime 从你的结果集中。在所有情况下都使用两个参数 getObject 方法。例如:

Instant instant = resultSet.getObject("startDate", Instant.class);

JDBC4.2指定应以这种方式支持java.time类。我相信所有当前的sql数据库引擎都有符合JDBC4.2的驱动程序。
只有当您不能使用Java8或更高版本时,才能获得 Timestamp 就像你的密码一样。接下来使用threeten backport中java.time类的版本并使用 DateTimeUtils 从Three-Ten backport类转换您的 Timestamp ,最好是en Instant ,但如果由于时区问题而恰好给了您错误的瞬间,那么 LocalDateTime . 例子:

Instant instant = 
    DateTimeUtils.toInstant(
        resultSet.getTimestamp("startDate")
    )
;

相关问题