JDBC bietet zwei Möglichkeiten, java.time-Objekte über JDBC auszutauschen:
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.
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);
Abruf:
java.sql.Date sqlDate = resultSet.getDate(1); LocalDate date = sqlDate.toLocalDate();
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(); }
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(); }
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!