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?

Wie kann ich mithilfe von JDBC Java-Objekte vom Typ „java.time' effizient in eine Postgres- oder H2-Datenbank einfügen und daraus abrufen?

Susan Sarandon
Freigeben: 2025-01-22 01:42:08
Original
647 Leute haben es durchsucht

JDBC effizient nutzen, um Java zu betreiben java.timeObjekte interagieren mit PostgreSQL- oder H2-Datenbanken

How can I efficiently insert and retrieve Java `java.time` objects into and from a Postgres or H2 database using JDBC?

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.timeTypen

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage