java - 使用 ResultSet.getString() 或 ResultSet.getTimestamp() 获取时间戳更好吗?
问题描述
在从 Postgres 或 Oracle 检索时间戳时——我们称之为startDate
——使用调用更好resultSet.getString("startDate")
还是resultSet.getTimestamp("startDate")
?
目前我正在使用resultSet.getString("startDate")
它,它工作正常,但在我看来,使用getTimestamp()
.
是否有既定的最佳实践?ResultSet.getString()
使用时间戳会产生任何意想不到的后果吗?
解决方案
使用 ResultSet.getString() 或 ResultSet.getTimestamp() 获取时间戳更好吗?
两者都不。
获取日期时间对象比获取字符串更好,因为这更好地表示事物的含义和含义,并且应该更适合 Java 程序中的进一步操作。
同时,使用 java.time 中的现代日期时间类比使用老式Timestamp
类要好得多。后者有相当大的设计问题,长期以来一直被认为是过时的。
JDBC 驱动程序略有不同,但请查看您是否可以获得正确的时间作为 a Instant
、 anOffsetDateTime
或者如果所有其他方法都失败,LocalDateTime
则从结果集中获得 a 。在所有情况下都使用双参数getObject
方法。例如:
Instant instant = resultSet.getObject("startDate", Instant.class);
JDBC 4.2指定应该以这种方式支持 java.time 类。我相信所有当前的 SQL 数据库引擎都有符合 JDBC 4.2 的驱动程序。
仅当您不能使用 Java 8 或更高版本时,Timestamp
请在代码中获取 as。接下来使用 ThreeTen-Backport 中的 java.time 类的版本,并使用 ThreeTen-Backport 中的DateTimeUtils
类将您的Timestamp
, 最好转换为 en Instant
,但如果由于时区问题而发生错误的瞬间,那么LocalDateTime
. 例子:
Instant instant =
DateTimeUtils.toInstant(
resultSet.getTimestamp("startDate")
)
;
推荐阅读
- google-cloud-platform - 在 Asp.net core 2.1 中,ResetPasswordAsync 失败并出现 Invalid Token 错误
- python - 根据默认大小重塑 np.array
- reactjs - 如何隐藏微调器组件
- python - 当一个词在另一个词中但有特殊情况时替换
- swift - 如何(重复)不使用图像的 WKInterfaceGroup 的动画
- java - 如何在 IBM MQ Connection Factory 中配置“MQCNO_HANDLE_SHARE_NO_BLOCK”?
- python - 如何使用 .dump 而不是 .sql 使用数据初始化 postgres 容器?
- jboss - 配置 Keycloak Wildfly 的 jboss-as-infinispan_4_0.xsd 架构中不存在的 Infinispan 设置
- ios - 将 UIScrollView 委托和 UICollectionView 委托分配给同一个类
- html - 如何撤消布尔玛嵌套元素中的is_mobile?