在从postgres或oracle检索时间戳时——我们称之为 startDate
--用这个更好吗 resultSet.getString("startDate")
呼叫或 resultSet.getTimestamp("startDate")
?
目前我正在使用 resultSet.getString("startDate")
它工作的很好,但我想它可能是更好的实践使用 getTimestamp()
.
是否有既定的最佳实践?使用会有什么意想不到的后果吗 ResultSet.getString()
在时间戳上?
2条答案
按热度按时间jaxagkaj1#
我将使用resultset.gettimestamp()。然后您的数据类型从代码正确Map到数据库。如果你愿意的话,你可以把结果转换成一个字符串。我不认为调用resultset.getstring()需要花费时间,但一般来说,检索正确的数据类型更合适。
92vpleto2#
使用resultset.getstring()或resultset.gettimestamp()获取时间戳更好吗?
都不是。
得到一个date-time对象比得到一个string更好,因为它能更好地表示事物的性质和含义,而且它应该更好地用于java程序中的进一步操作。
同时,使用java.time中的现代日期时间类比使用老式的日期时间类要好得多
Timestamp
班级。后者有相当大的设计问题,长期以来被认为是过时的。jdbc驱动程序有点不同,但是看看您是否可以作为
Instant
,安OffsetDateTime
或者如果其他都失败了LocalDateTime
从你的结果集中。在所有情况下都使用两个参数getObject
方法。例如:JDBC4.2指定应以这种方式支持java.time类。我相信所有当前的sql数据库引擎都有符合JDBC4.2的驱动程序。
只有当您不能使用Java8或更高版本时,才能获得
Timestamp
就像你的密码一样。接下来使用threeten backport中java.time类的版本并使用DateTimeUtils
从Three-Ten backport类转换您的Timestamp
,最好是enInstant
,但如果由于时区问题而恰好给了您错误的瞬间,那么LocalDateTime
. 例子: