Bas*_*que 28 java datetime jdbc java-time
通过JDBC 4.1或更早版本从数据库中检索java.sql.Timestamp时,如何获取/转换为java.time对象?
Postgres的开源JDBC驱动程序都没有兼容JDBC 4.2,所以我正在寻找一种方法来使用java.time和JDBC 4.1.
pic*_*ypg 48
通过在Java 8及更高版本中使用驱动程序,您应该自动在java.sql.Timestamp
对象上自动获取某些方法.双方java.sql.Time
并java.sql.Date
有相似的转换方法.
也就是说,要从java.sql转换为java.time,您正在寻找:
要从另一个方向,从java.time到java.sql,请使用新的静态方法:
Timestamp.from(instant)
Timestamp.valueOf(localDateTime)
Date.valueOf(localDate)
Time.valueOf(localTime)
例:
preparedStatement.setTimestamp( 2, Timestamp.from(instant) );
Run Code Online (Sandbox Code Playgroud)
正如其他人在评论中所说,PostgreSQL 的 JDBC 驱动程序现在支持 JDBC 4.2,包括 Java 8 Time API 支持。我们可以直接与数据库交换java.time对象。
\n\nhttps://jdbc.postgresql.org/documentation/head/8-date-time.html
\n\n因此无需转换,无需再次使用 java.sql 类型。仅使用java.time包中的替代品,如此列表中所示。
\n\nPostgreSQL\xe2\x84\xa2 Java SE 8 (java.time)\nDATE LocalDate\nTIME [ WITHOUT TIMEZONE ] LocalTime\nTIMESTAMP [ WITHOUT TIMEZONE ] LocalDateTime\nTIMESTAMP WITH TIMEZONE OffsetDateTime or Instant\n
Run Code Online (Sandbox Code Playgroud)\n\n这可以通过检索ResultSet::getObject
ResultSet rs = ...;\nwhile (rs.next()) {\n LocalDate localDate = rs.getObject(1, LocalDate.class));\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n通过调用 来存储java.timePreparedStatement::setObject
对象。
myPreparedStatement.setObject( \xe2\x80\xa6 , myInstant ) ; \n
Run Code Online (Sandbox Code Playgroud)\n