在从Postgres或Oracle中检索时间戳时-我们将其称为startDate
-使用resultSet.getString("startDate")
调用或resultSet.getTimestamp("startDate")
更好吗?
目前,我正在使用resultSet.getString("startDate")
,它可以正常工作,但是在我看来,使用getTimestamp()
可能是更好的做法。
是否有确定的最佳实践?在时间戳上使用ResultSet.getString()
会带来任何意外的后果吗?
答案 0 :(得分:2)
使用ResultSet.getString()还是ResultSet.getTimestamp()更好? 获得时间戳?
都不是。
获取日期时间对象比字符串更好,因为它可以更好地表示事物的本质和含义,并应更好地用于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类的版本,并使用ThreeTen-Backport中的DateTimeUtils
类转换Timestamp
,最好转换为Instant
,但是如果那样的话碰巧由于时区问题而给您错误的时间,然后是LocalDateTime
。示例:
Instant instant =
DateTimeUtils.toInstant(
resultSet.getTimestamp("startDate")
)
;
答案 1 :(得分:0)
我将使用resultSet.getTimestamp()。然后,您的数据类型将从代码正确映射到数据库。如果需要,可以将结果转换为字符串。我认为调用resultSet.getString()不会花费时间,但是通常更适合检索正确的数据类型。