Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memasukkan dan Mendapatkan Objek `java.time.LocalDate` dalam Pangkalan Data H2 Menggunakan JDBC?
java.time.LocalDate
objek dalam pangkalan data SQL seperti pangkalan data H2Soalan:
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!