Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von JDBC Java-Objekte vom Typ „java.time' effizient in eine Postgres- oder H2-Datenbank einfügen und daraus abrufen?
JDBC effizient nutzen, um Java zu betreiben java.time
Objekte interagieren mit PostgreSQL- oder H2-Datenbanken
In diesem Artikel wird untersucht, wie Sie JDBC effizient zum Einfügen und Abrufen von Java-java.time
-Objekten wie LocalDate
in eine PostgreSQL- oder H2-Datenbank verwenden können.
Traditionelle Methode: Verwenden Sie PreparedStatement::setDate
und ResultSet::getDate
Der traditionelle Ansatz basiert auf dem veralteten Typ java.sql.Date
und verwendet PreparedStatement::setDate
und ResultSet::getDate
für Operationen. Um diese Probleme zu vermeiden, werden jedoch moderne Methoden empfohlen.
Moderner Ansatz: direkte Manipulation von java.time
Typen
Treiber kompatibel mit JDBC 4.2 und höher
Die effektivste Methode ist die Verwendung eines Treibers, der mit JDBC 4.2 und höher kompatibel ist. Diese Treiber unterstützen java.time
-Objekte direkt, ohne Typkonvertierung.
Daten einfügen: Verwenden Sie PreparedStatement::setObject(1, myLocalDate)
, wobei myLocalDate
eine LocalDate
-Objektinstanz ist. Der Treiber erkennt automatisch den entsprechenden SQL-Typ und konvertiert ihn.
Daten abrufen: Verwenden Sie ResultSet::getObject("my_date_column_", LocalDate.class)
, um LocalDate
Objekte abzurufen. Durch die Angabe der erwarteten Klasse wird die Typsicherheit gewährleistet.
Legacy-Treiber (unter JDBC 4.2)
Für Treiber, die nicht mit JDBC 4.2 und höher kompatibel sind, ist es notwendig, java.time
-Objekte vorübergehend in entsprechende java.sql
-Typen zu konvertieren und umgekehrt.
Verwenden Sie java.sql.Date.valueOf(myLocalDate)
, um LocalDate
in java.sql.Date
umzuwandeln.
Daten einfügen: Verwenden Sie preparedStatement.setDate(1, java.sql.Date.valueOf(myLocalDate))
.
Daten abrufen: Verwenden Sie rs.getDate(1)
, um ein java.sql.Date
-Objekt abzurufen, und verwenden Sie dann sqlDate.toLocalDate()
, um es in ein LocalDate
umzuwandeln.
Beispielcode mit JDBC 4.2-kompatiblem Treiber
<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>
Das Laufergebnis ist ähnlich wie:
<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>
Beispielcode mit der alten Version des Treibers (Entspricht dem Originalcode und wird hier nicht wiederholt)
Durch die Auswahl des richtigen JDBC-Treibers und die Verwendung der entsprechenden Methoden können Sie eine effiziente und typsichere Interaktion mit Ihrer Datenbank gewährleisten. Denken Sie daran, vorrangig Treiber zu verwenden, die mit JDBC 4.2 und höher kompatibel sind, um den Code zu vereinfachen und die Effizienz zu verbessern.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von JDBC Java-Objekte vom Typ „java.time' effizient in eine Postgres- oder H2-Datenbank einfügen und daraus abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!