How to get a java.time object from a java.sql.Timestamp without a JDBC 4.2 driver?

后端 未结 2 1903
轮回少年
轮回少年 2020-12-08 14:11

When retrieving a java.sql.Timestamp from a database via JDBC 4.1 or earlier, how does one obtain/convert to a java.time object?

Neither of the open-source JDBC driv

相关标签:
2条回答
  • 2020-12-08 14:42

    No need to convert

    Like others have said in comments, PostgreSQL's JDBC driver now supports JDBC 4.2 including Java 8 Time API support. We can exchange java.time objects directly with the database.

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

    So no need to convert, no need to ever use the java.sql types again. Use only their replacements in the java.time package as shown in this list.

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

    This can be retrieved via ResultSet::getObject

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

    Store a java.time object by calling PreparedStatement::setObject.

    myPreparedStatement.setObject( … , myInstant ) ; 
    
    0 讨论(0)
  • 2020-12-08 15:00

    New Methods On Old Classes

    By using the driver with Java 8 and later, you should automatically pick up some methods on your java.sql.Timestamp object for free. Both java.sql.Time and java.sql.Date have similar conversion methods.

    Namely, to convert from java.sql to java.time you are looking for:

    • Timestamp::toInstant()
    • Timestamp::toLocalDateTime()
    • Date::toLocalDate()
    • Time::toLocalTime()

    To go the other direction, from java.time to java.sql, use the new static methods:

    • Timestamp.from(instant)
    • Timestamp.valueOf(localDateTime)
    • Date.valueOf(localDate)
    • Time.valueOf(localTime)

    Example:

    preparedStatement.setTimestamp( 2, Timestamp.from(instant) );
    
    0 讨论(0)
提交回复
热议问题