JDBC を効率的に使用して Java を操作しますjava.time
オブジェクトは PostgreSQL または H2 データベースと対話します
この記事では、JDBC を効率的に使用して、PostgreSQL または H2 データベースで java.time
などの Java LocalDate
オブジェクトを挿入および取得する方法について説明します。
従来の方法: PreparedStatement::setDate
と ResultSet::getDate
従来のアプローチは、廃止された java.sql.Date
型に依存し、操作に PreparedStatement::setDate
と ResultSet::getDate
を使用します。ただし、これらの問題を回避するには、最新の方法をお勧めします。
最新のアプローチ: java.time
型
JDBC 4.2 以降と互換性のあるドライバー
最も効果的な方法は、JDBC 4.2 以降と互換性のあるドライバーを使用することです。これらのドライバーは、型変換せずに java.time
オブジェクトを直接サポートします。
データの挿入: PreparedStatement::setObject(1, myLocalDate)
を使用します。myLocalDate
は LocalDate
オブジェクト インスタンスです。ドライバーは自動的に検出し、適切な SQL タイプに変換します。
データの取得: ResultSet::getObject("my_date_column_", LocalDate.class)
オブジェクトを取得するには、LocalDate
を使用します。予期されるクラスを指定すると、型の安全性が確保されます。
レガシードライバー (JDBC 4.2 以下)
JDBC 4.2 以降と互換性のないドライバーの場合は、java.time
オブジェクトを同等の java.sql
型に一時的に変換する必要があります (逆も同様)。
java.sql.Date.valueOf(myLocalDate)
を LocalDate
に変換するには、java.sql.Date
を使用します。
データを挿入: preparedStatement.setDate(1, java.sql.Date.valueOf(myLocalDate))
を使用します。
データの取得: rs.getDate(1)
を使用して java.sql.Date
オブジェクトを取得し、sqlDate.toLocalDate()
を使用してそれを LocalDate
に変換します。
JDBC 4.2 互換ドライバーを使用したサンプルコード
<code class="language-java">import java.sql.*; import java.time.LocalDate; import java.time.ZoneId; import java.util.UUID; public class App { public static void main(String[] args) { 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 + " (" + "id_ UUID DEFAULT random_uuid() PRIMARY KEY ," + "date_ DATE NOT NULL" + ");"; stmt.execute(sql); 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)); preparedStatement.executeUpdate(); preparedStatement.setObject(1, today); preparedStatement.executeUpdate(); preparedStatement.setObject(1, today.plusDays(1)); preparedStatement.executeUpdate(); } sql = "SELECT * FROM test_"; try (ResultSet rs = stmt.executeQuery(sql);) { while (rs.next()) { UUID id = rs.getObject("id_", UUID.class); LocalDate localDate = rs.getObject("date_", LocalDate.class); System.out.println("id_: " + id + " | date_: " + localDate); } } } catch (SQLException e) { e.printStackTrace(); } } }</code>
実行結果は次のようになります:
<code>id_: e856a305-41a1-45fa-ab69-cfa676285461 | date_: 2017-03-26 id_: a4474e79-3e1f-4395-bbba-044423b37b9f | date_: 2017-03-27 id_: 5d47bc3d-ebfa-43ab-bbc2-7bb2313b33b0 | date_: 2017-03-28</code>
古いバージョンのドライバーを使用したサンプル コード (元のコードと同じなので、ここでは繰り返しません)
適切な JDBC ドライバーを選択し、適切なメソッドを使用することで、データベースとの効率的かつタイプセーフな対話を確保できます。 コードを簡素化し効率を向上させるために、JDBC 4.2 以降と互換性のあるドライバーの使用を優先してください。
以上がJDBC を使用して、Postgres または H2 データベースに Java `java.time` オブジェクトを効率的に挿入および取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。