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
Libérer: 2025-01-02 15:55:39
original
931 Les gens l'ont consulté

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);
Copier après la connexion

Récupération :

java.sql.Date sqlDate = resultSet.getDate(1);
LocalDate date = sqlDate.toLocalDate();
Copier après la connexion

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();
}
Copier après la connexion

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal