JDBC结果集检索LocalDateTime

时间:2018-08-01 11:59:05

标签: java mysql jdbc java-time

我运行一个简单的查询以从MySQL数据库检索一行。 我得到ResultSet,我需要从中检索LocalDateTime对象。 我的数据库表。

CREATE TABLE `some_entity` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(45) NOT NULL,
  `text` varchar(255) DEFAULT NULL,
  `created_date_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

我需要通过ID检索某些实体。

String SELECT = "SELECT ID, TITLE, TEXT, CREATED_DATE_TIME FROM some_entity WHERE some_entity.id = ?";
PreparedStatement selectPreparedStatement = selectPreparedStatement = connection.prepareStatement(SELECT);
try {
    selectPreparedStatement.setLong(1, id);
    ResultSet resultSet = selectPreparedStatement.executeQuery();
    if (resultSet.next()) {
        Long foundId = resultSet.getLong(1);
        String title = resultSet.getString(2);
        String text = resultSet.getString(3);
        LocalDateTime createdDateTime = null;// How do I retrieve it???
    }
} catch (SQLException e) {
    throw new RuntimeException("Failed to retrieve some entity by id.", e);
}

1 个答案:

答案 0 :(得分:8)

尝试将其检索为java.sql.Timestamp,然后使用LocalDateTime转换为Timestamp.toLocalDateTime

LocalDateTime createdDateTime = resultSet.getTimestamp(4).toLocalDateTime()

EDIT :正如Gord Thompsonhis comment中指出的那样,使用最新的足够的JDBC驱动程序时,还有一个更好的解决方案:

  

resultSet.getObject(4, LocalDateTime.class)

这会跳过创建冗余的java.sql.Timestamp实例。