Maison >Java >javaDidacticiel >Comment insérer et récupérer des objets java.time à l'aide de JDBC ?

Comment insérer et récupérer des objets java.time à l'aide de JDBC ?

DDD
DDDoriginal
2025-01-02 15:55:39938parcourir

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

Insertion et récupération d'objets java.time à l'aide de JDBC

JDBC propose deux façons d'échanger des objets java.time via JDBC :

Pilotes compatibles JDBC 4.2

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.

Pilotes non conformes

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn