Heim > Java > javaLernprogramm > Wie füge ich java.time-Objekte mit JDBC ein und rufe sie ab?

Wie füge ich java.time-Objekte mit JDBC ein und rufe sie ab?

DDD
Freigeben: 2025-01-02 15:55:39
Original
931 Leute haben es durchsucht

How to Insert and Retrieve java.time Objects Using JDBC?

Einfügen und Abrufen von java.time-Objekten mit JDBC

JDBC bietet zwei Möglichkeiten, java.time-Objekte über JDBC auszutauschen:

JDBC 4.2-kompatible Treiber

JDBC 4.2-kompatibel Mit Treibern können Sie direkt und ohne Konvertierungen mit java.time-Objekten interagieren.

Einfügung: Verwenden Sie setObject, um Ihr java.time-Objekt zu übergeben. Der Treiber konvertiert ihn automatisch in den entsprechenden SQL-Typ (z. B. LocalDate in SQL DATE).

Abruf: Rufen Sie getObject zweimal auf, zuerst ohne Argumente, um den Wert als Objekt abzurufen, dann mit die erwartete Klasse als Argument für Typsicherheit.

Nicht konforme Treiber

Für Treiber, die JDBC 4.2 nicht unterstützen, können Sie wie folgt zwischen den Typen java.time und java.sql konvertieren Code:

Einfügung:

LocalDate date = ...;
java.sql.Date sqlDate = java.sql.Date.valueOf(date);
preparedStatement.setDate(1, sqlDate);
Nach dem Login kopieren

Abruf:

java.sql.Date sqlDate = resultSet.getDate(1);
LocalDate date = sqlDate.toLocalDate();
Nach dem Login kopieren

Beispiel mit H2

Verwendung von JDBC 4.2 mit H2:

try {
    Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

try (
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:mydb");
    Statement stmt = conn.createStatement();
) {
    String sql = "CREATE TABLE test (id UUID, date DATE);";
    stmt.execute(sql);

    LocalDate today = LocalDate.now();
    sql = String.format("INSERT INTO test (id, date) VALUES (%s, %s)", UUID.randomUUID(), today);
    stmt.executeUpdate(sql);

    sql = "SELECT id, date FROM test";
    try (ResultSet rs = stmt.executeQuery(sql)) {
        while (rs.next()) {
            UUID id = rs.getObject("id", UUID.class);
            LocalDate date = rs.getObject("date", LocalDate.class);
            System.out.println(String.format("id: %s, date: %s", id, date));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}
Nach dem Login kopieren

Beispiel mit nicht konformen Treibern

Verwendung von Nicht-JDBC 4.2 mit H2:

try {
    Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

try (
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:mydb");
    Statement stmt = conn.createStatement();
) {
    String sql = "CREATE TABLE test (id UUID, date DATE);";
    stmt.execute(sql);

    LocalDate today = LocalDate.now();
    java.sql.Date sqlDate = java.sql.Date.valueOf(today);
    sql = String.format("INSERT INTO test (id, date) VALUES (%s, %s)", UUID.randomUUID(), sqlDate);
    stmt.executeUpdate(sql);

    sql = "SELECT id, date FROM test";
    try (ResultSet rs = stmt.executeQuery(sql)) {
        while (rs.next()) {
            UUID id = (UUID) rs.getObject("id");
            java.sql.Date date = rs.getDate("date");
            LocalDate localDate = date.toLocalDate();
            System.out.println(String.format("id: %s, date: %s", id, localDate));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie füge ich java.time-Objekte mit JDBC ein und rufe sie ab?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage