首頁 > 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 範例

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 4.2 與 H2 結合使用:

以上是如何使用 JDBC 插入和檢索 java.time 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板