30

通过 JDBC 4.1 或更早版本从数据库中检索java.sql.Timestamp时,如何获取/转换为java.time对象?

Postgres 的开源 JDBC 驱动程序都不是 JDBC 4.2 兼容的,所以我正在寻找一种方法来使用 java.time 和 JDBC 4.1。

4

2 回答 2

51

旧类的新方法

通过使用 Java 8 及更高版本的驱动程序,您应该会自动java.sql.Timestamp免费获取对象上的一些方法。两者java.sql.Time都有java.sql.Date相似的转换方法。

即,要从java.sql转换为java.time您正在寻找:

换个方向,从java.timejava.sql,使用新的静态方法:

例子:

preparedStatement.setTimestamp( 2, Timestamp.from(instant) );
于 2014-03-18T04:50:56.597 回答
4

无需转换

就像其他人在评论中所说的那样,PostgreSQL 的 JDBC 驱动程序现在支持 JDBC 4.2,包括 Java 8 Time API 支持。我们可以直接与数据库交换java.time对象。

https://jdbc.postgresql.org/documentation/head/8-date-time.html

所以不需要转换,也不需要再次使用 java.sql 类型。仅在java.time包中使用它们的替代品,如此列表中所示。

PostgreSQL™                      Java SE 8 (java.time)
DATE                             LocalDate
TIME [ WITHOUT TIMEZONE ]        LocalTime
TIMESTAMP [ WITHOUT TIMEZONE ]   LocalDateTime
TIMESTAMP WITH TIMEZONE          OffsetDateTime or Instant

这可以通过检索ResultSet::getObject

ResultSet rs = ...;
while (rs.next()) {
  LocalDate localDate = rs.getObject(1, LocalDate.class));
}

通过调用来存储java.time对象PreparedStatement::setObject

myPreparedStatement.setObject( … , myInstant ) ; 
于 2018-06-03T15:58:10.357 回答