首页 > Java > java教程 > 如何使用 JDBC 插入和检索 java.time 对象?

如何使用 JDBC 插入和检索 java.time 对象?

DDD
发布: 2025-01-02 15:55:39
原创
931 人浏览过

How to Insert and Retrieve java.time Objects Using JDBC?

使用 JDBC 插入和检索 java.time 对象

JDBC 提供了两种通过 JDBC 交换 java.time 对象的方法:

兼容 JDBC 4.2 的驱动程序

兼容 JDBC 4.2 drivers 让您直接与 java.time 对象交互,无需转换。

插入: 使用 setObject 传递 java.time 对象。驱动程序会自动将其转换为适当的 SQL 类型(例如,LocalDate 转换为 SQL DATE)。

检索: 调用 getObject 两次,首先不带参数将值检索为对象,然后使用预期的类作为类型安全的参数。

不合规驱动程序

对于不支持 JDBC 4.2 的驱动程序,您可以使用以下方法在 java.time 和 java.sql 类型之间进行转换代码:

插入:

LocalDate date = ...;
java.sql.Date sqlDate = java.sql.Date.valueOf(date);
preparedStatement.setDate(1, sqlDate);
登录后复制

检索:

java.sql.Date sqlDate = resultSet.getDate(1);
LocalDate date = sqlDate.toLocalDate();
登录后复制

H2 示例

使用JDBC 4.2 与 H2:

try {
    Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

try (
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:mydb");
    Statement stmt = conn.createStatement();
) {
    String sql = "CREATE TABLE test (id UUID, date DATE);";
    stmt.execute(sql);

    LocalDate today = LocalDate.now();
    sql = String.format("INSERT INTO test (id, date) VALUES (%s, %s)", UUID.randomUUID(), today);
    stmt.executeUpdate(sql);

    sql = "SELECT id, date FROM test";
    try (ResultSet rs = stmt.executeQuery(sql)) {
        while (rs.next()) {
            UUID id = rs.getObject("id", UUID.class);
            LocalDate date = rs.getObject("date", LocalDate.class);
            System.out.println(String.format("id: %s, date: %s", id, date));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}
登录后复制

不兼容驱动程序的示例

将非 JDBC 4.2 与 H2 结合使用:

try {
    Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

try (
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:mydb");
    Statement stmt = conn.createStatement();
) {
    String sql = "CREATE TABLE test (id UUID, date DATE);";
    stmt.execute(sql);

    LocalDate today = LocalDate.now();
    java.sql.Date sqlDate = java.sql.Date.valueOf(today);
    sql = String.format("INSERT INTO test (id, date) VALUES (%s, %s)", UUID.randomUUID(), sqlDate);
    stmt.executeUpdate(sql);

    sql = "SELECT id, date FROM test";
    try (ResultSet rs = stmt.executeQuery(sql)) {
        while (rs.next()) {
            UUID id = (UUID) rs.getObject("id");
            java.sql.Date date = rs.getDate("date");
            LocalDate localDate = date.toLocalDate();
            System.out.println(String.format("id: %s, date: %s", id, localDate));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}
登录后复制

以上是如何使用 JDBC 插入和检索 java.time 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板