Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memasukkan dan Mendapatkan Objek `java.time.LocalDate` dalam Pangkalan Data H2 Menggunakan JDBC?

Bagaimana untuk Memasukkan dan Mendapatkan Objek `java.time.LocalDate` dalam Pangkalan Data H2 Menggunakan JDBC?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-22 01:47:09214semak imbas

How to Insert and Retrieve `java.time.LocalDate` Objects in an H2 Database Using JDBC?

Gunakan JDBC untuk memasukkan dan mendapatkan java.time.LocalDate objek dalam pangkalan data SQL seperti pangkalan data H2

Soalan:

Bagaimana untuk memasukkan dan mendapatkan semula java.time jenis (cth. LocalDate) dalam pangkalan data SQL seperti enjin pangkalan data H2 menggunakan JDBC?

Jawapan:

Kaedah 1: Pemandu serasi dengan JDBC 4.2

Untuk pemacu JDBC yang mematuhi spesifikasi JDBC 4.2 atau lebih tinggi, anda boleh terus menggunakan kaedah setObject dan getObject untuk mengendalikan objek java.time. Pemacu secara automatik mengesan jenis Java dan menukarnya kepada jenis SQL yang sepadan. Contohnya:

<code class="language-java">preparedStatement.setObject(1, myLocalDate); // LocalDate转换为SQL DATE
LocalDate localDate = myResultSet.getObject("my_date_column_", LocalDate.class); // 指定预期类以确保类型安全</code>

Kaedah 2: Pemacu versi lama sebelum JDBC 4.2

Untuk pemandu yang tidak mematuhi JDBC 4.2, anda mesti menukar secara ringkas objek java.time kepada jenis java.sql yang setara dan sebaliknya. Gunakan kaedah penukaran yang ditambahkan pada kelas warisan:

<code class="language-java">java.sql.Date mySqlDate = java.sql.Date.valueOf(myLocalDate);
preparedStatement.setDate(1, mySqlDate);
java.sql.Date sqlDate = myResultSet.getDate("date_"); //尽可能简短地处理转换
LocalDate localDate = sqlDate.toLocalDate();</code>

Contoh pemacu yang serasi dengan JDBC 4.2:

<code class="language-java">import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;

public class LocalDateExample {

    public static void main(String[] args) throws SQLException {
        String url = "jdbc:h2:mem:test_db"; // 更改为您的数据库URL
        String user = "user";
        String password = "password";

        try (
                Connection conn = DriverManager.getConnection(url, user, password);
                Statement stmt = conn.createStatement();
        ) {
            stmt.execute("CREATE TABLE IF NOT EXISTS employees (id INT PRIMARY KEY, name VARCHAR(255), birthday DATE)");

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

            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, birthday) VALUES (?, ?)");
            pstmt.setString(1, "John Doe");
            pstmt.setObject(2, today); // 直接传递LocalDate
            pstmt.executeUpdate();

            // 检索LocalDate值
            ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
            while (rs.next()) {
                LocalDate birthday = rs.getObject("birthday", LocalDate.class); // 指定预期类
                System.out.println("员工:" + rs.getString("name") + ",生日:" + birthday);
            }

            rs.close();
            pstmt.close();
            stmt.close();
        }
    }
}</code>

Contoh pemandu warisan:

<code class="language-java">import java.sql.*;
import java.time.LocalDate;

public class LocalDateExample {

    public static void main(String[] args) throws SQLException {
        String url = "jdbc:h2:mem:test_db"; // 更改为您的数据库URL
        String user = "user";
        String password = "password";

        try (
                Connection conn = DriverManager.getConnection(url, user, password);
                Statement stmt = conn.createStatement();
        ) {
            stmt.execute("CREATE TABLE IF NOT EXISTS employees (id INT PRIMARY KEY, name VARCHAR(255), birthday DATE)");

            // 插入LocalDate值
            LocalDate today = LocalDate.now();
            java.sql.Date sqlDate = java.sql.Date.valueOf(today);

            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, birthday) VALUES (?, ?)");
            pstmt.setString(1, "John Doe");
            pstmt.setDate(2, sqlDate); // 将LocalDate转换为java.sql.Date
            pstmt.executeUpdate();

            // 检索LocalDate值
            ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
            while (rs.next()) {
                java.sql.Date sqlDate = rs.getDate("birthday");
                LocalDate birthday = sqlDate.toLocalDate(); // 将java.sql.Date转换为LocalDate
                System.out.println("员工:" + rs.getString("name") + ",生日:" + birthday);
            }

            rs.close();
            pstmt.close();
            stmt.close();
        }
    }
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan dan Mendapatkan Objek `java.time.LocalDate` dalam Pangkalan Data H2 Menggunakan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn