JDBC propose deux façons d'échanger des objets java.time via JDBC :
Conforme JDBC 4.2 drivers vous permettent d'interagir directement avec les objets java.time, sans conversions.
Insertion : Utilisez setObject pour transmettre votre objet java.time. Le pilote le convertit automatiquement dans le type SQL approprié (par exemple, LocalDate en SQL DATE).
Récupération : Appelez getObject deux fois, d'abord sans arguments pour récupérer la valeur en tant qu'objet, puis avec la classe attendue comme argument pour la sécurité de type.
Pour les pilotes qui ne prend pas en charge JDBC 4.2, vous pouvez convertir entre les types java.time et java.sql en utilisant le code suivant :
Insertion :
LocalDate date = ...; java.sql.Date sqlDate = java.sql.Date.valueOf(date); preparedStatement.setDate(1, sqlDate);
Récupération :
java.sql.Date sqlDate = resultSet.getDate(1); LocalDate date = sqlDate.toLocalDate();
Exemple avec H2
Utilisation de JDBC 4.2 avec 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(); }
Exemple avec des pilotes non conformes
Utilisation de non-JDBC 4.2 avec 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(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!