首页 >Java >java教程 >如何在H2数据库中使用JDBC处理java.time对象?

如何在H2数据库中使用JDBC处理java.time对象?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-31 19:02:11251浏览

How to Handle java.time Objects with JDBC in H2 Database?

与 java.time 对象的 JDBC 数据交换

问题:如何在我的对象中包含 java.time 类型使用 JDBC 的 SQL 数据库,特别是 H2 数据库引擎?

答案:有两种方法可以通过 JDBC 来协调与 java.time 对象的数据交换:

符合 JDBC 4.2 的驱动程序

  • 使用兼容 JDBC 4.2 或更高版本的 JDBC 驱动程序,您可以直接操作 java.time 对象。
  • JDBC 委员会合并了 setObject/getObject 方法来处理此问题,从而不再需要类似 setLocalDate/getLocalDate 的方法。
  • 要插入数据,请使用 setObject 方法您的 java.time 对象作为参数。
  • 对于数据检索,请使用 getObject 方法以及预期的数据类型作为附加参数,确保类型安全。

不兼容 JDBC 4.2 的驱动程序

  • 对于尚未与 JDBC 4.2 兼容的 JDBC 驱动程序,暂时在 java.time 之间转换和 java.sql 类型。
  • 使用 java.sql.Date.valueOf 进行转换LocalDate 到 java.sql.Date 进行插入。
  • 检索时,使用其 toLocalDate 方法将检索到的 java.sql.Date 转换为 LocalDate。

使用 H2 的示例代码数据库

JDBC 4.2符合

LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));

// Insert row
preparedStatement.setObject(1, today.minusDays(1));
preparedStatement.executeUpdate();
preparedStatement.setObject(1, today);
preparedStatement.executeUpdate();
preparedStatement.setObject(1, today.plusDays(1));
preparedStatement.executeUpdate();

// Retrieve data
LocalDate localDate = myResultSet.getObject("date_", LocalDate.class);

不符合 JDBC 4.2

// Insert row
preparedStatement.setDate(1, java.sql.Date.valueOf(today));
preparedStatement.executeUpdate();

// Retrieve data
java.sql.Date sqlDate = myResultSet.getDate("date_");
LocalDate localDate = sqlDate.toLocalDate();

以上是如何在H2数据库中使用JDBC处理java.time对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn