使用ResultSet.getString()或ResultSet.getTimestamp()以获得时间戳更好吗?

时间:2018-12-06 20:41:17

标签: java date timestamp resultset

在从Postgres或Oracle中检索时间戳时-我们将其称为startDate-使用resultSet.getString("startDate")调用或resultSet.getTimestamp("startDate")更好吗?

目前,我正在使用resultSet.getString("startDate"),它可以正常工作,但是在我看来,使用getTimestamp()可能是更好的做法。

是否有确定的最佳实践?在时间戳上使用ResultSet.getString()会带来任何意外的后果吗?

2 个答案:

答案 0 :(得分:2)

  

使用ResultSet.getString()还是ResultSet.getTimestamp()更好?   获得时间戳?

都不是。

获取日期时间对象比字符串更好,因为它可以更好地表示事物的本质和含义,并应更好地用于Java程序中的进一步操作。

同时使用java.time中的现代日期时间类比老式的Timestamp类要好得多。后者具有很大的设计问题,长期以来被认为已经过时。

JDBC驱动程序稍有不同,但是看看您是否可以将正确的时间设置为InstantOffsetDateTime或其他所有方法均失败,然后从结果中获取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()不会花费时间,但是通常更适合检索正确的数据类型。