使用PreparedStatement::setDate 和ResultSet 的舊方法::
使用PreparedStatement::setDate 和ResultSet 的舊方法:: getDate 適用於舊版java.sql.Date 類型。但是,最好避免使用這些麻煩的舊日期時間類別。相反,請使用現代 java.time 類型。 透過JDBC 交換java.time 物件有兩種途徑:相容於JDBC 4.2 的驅動程式如果您的JDBC 驅動程式符合使用JDBC 4.2 規格或更高版本,您可以直接處理java.time 物件。相容的驅動程式知道 java.time 類型,並添加了 setObject/getObject 方法來處理它們。 要將資料傳送到資料庫,只需將 java.time 物件傳遞給PreparedStatement::setObject。驅動程式會偵測傳遞的參數的 Java 類型並將其轉換為適當的 SQL 類型。 Java LocalDate 轉換為 SQL DATE 類型。 要從資料庫檢索數據,請呼叫 ResultSet::getObject。我們可以傳遞一個額外的參數,即我們期望接收的資料類型的 Class,而不是強制轉換產生的 Object 物件。透過指定預期的類,我們可以透過您的 IDE 和編譯器進行類型安全檢查和驗證。 較舊的驅動程序,在JDBC 4.2 之前如果您的JDBC 驅動程式尚不符合JDBC 4.2 或稍後,您需要將java.time 物件簡單地轉換為其等效的java.sql 類型,反之亦然。查看新增到舊類別中的新轉換方法。 這是一個完整的工作範例應用程序,展示如何在 H2 資料庫中插入和選擇 LocalDate 值:import java.sql.*; import java.time.LocalDate; import java.time.ZoneId; import java.util.UUID; public class App { public static void main ( String[] args ) { App app = new App ( ); app.doIt ( ); } private void doIt ( ) { try { Class.forName ( "org.h2.Driver" ); } catch ( ClassNotFoundException e ) { e.printStackTrace ( ); } try ( Connection conn = DriverManager.getConnection ( "jdbc:h2:mem:trash_me_db_" ) ; Statement stmt = conn.createStatement ( ) ; ) { String tableName = "test_"; String sql = "CREATE TABLE " + tableName + " (\n" + " id_ UUID DEFAULT random_uuid() PRIMARY KEY ,\n" + " date_ DATE NOT NULL\n" + ");"; stmt.execute ( sql ); // Insert row. sql = "INSERT INTO test_ ( date_ ) " + "VALUES (?) ;"; try ( PreparedStatement preparedStatement = conn.prepareStatement ( sql ) ; ) { LocalDate today = LocalDate.now ( ZoneId.of ( "America/Montreal" ) ); preparedStatement.setObject ( 1 , today.minusDays ( 1 ) ); // Yesterday. preparedStatement.executeUpdate ( ); preparedStatement.setObject ( 1, today ); // Today. preparedStatement.executeUpdate ( ); preparedStatement.setObject ( 1, today.plusDays ( 1 ) ); // Tomorrow. preparedStatement.executeUpdate ( ); } // Query all. sql = "SELECT * FROM test_"; try ( ResultSet rs = stmt.executeQuery ( sql ) ; ) { while ( rs.next ( ) ) { UUID id = rs.getObject ( "id_" , UUID.class ); // Pass the class to be type-safe. LocalDate localDate = rs.getObject ( "date_", LocalDate.class ); // Pass class for type-safety. System.out.println ( "id_: " + id + " | date_: " + localDate ); } } } catch ( SQLException e ) { e.printStackTrace ( ); } } }
以上是如何有效地使用 java.time 類型和 JDBC 進行資料庫互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!