


Comment insérer et récupérer des types java.time tels que LocalDate vers/depuis une base de données SQL telle que H2
L'ancienne façon d'utiliser PreparedStatement::setDate et ResultSet ::getDate fonctionne pour l'ancien type java.sql.Date. Cependant, il est préférable d’éviter d’utiliser ces anciennes classes date-heure gênantes. Utilisez plutôt les types java.time modernes.
Il existe deux manières d'échanger des objets java.time via JDBC :
Pilotes compatibles JDBC 4.2
Si votre pilote JDBC est conforme avec la spécification JDBC 4.2 ou ultérieure, vous pouvez gérer directement les objets java.time. Les pilotes conformes connaissent les types java.time et ont ajouté les méthodes setObject/getObject pour les gérer.
Pour envoyer des données à la base de données, transmettez simplement votre objet java.time à PreparedStatement::setObject. Le type Java de votre argument transmis est détecté par le pilote et converti en type SQL approprié. Un Java LocalDate est converti en un type SQL DATE.
Pour récupérer des données de la base de données, appelez ResultSet::getObject. Plutôt que de convertir l'objet Object résultant, nous pouvons transmettre un argument supplémentaire, la classe du type de données que nous espérons recevoir. En spécifiant la classe attendue, nous obtenons une sécurité de type vérifiée par votre IDE et votre compilateur.
Pilotes plus anciens, avant JDBC 4.2
Si votre pilote JDBC n'est pas encore conforme à JDBC 4.2 ou plus tard, vous devrez alors convertir brièvement vos objets java.time en leur type java.sql équivalent ou vice versa. Recherchez les nouvelles méthodes de conversion ajoutées aux anciennes classes.
Voici un exemple d'application complet montrant comment insérer et sélectionner des valeurs LocalDate dans une base de données H2 :
import java.sql.*; import java.time.LocalDate; import java.time.ZoneId; import java.util.UUID; public class App { public static void main ( String[] args ) { App app = new App ( ); app.doIt ( ); } private void doIt ( ) { try { Class.forName ( "org.h2.Driver" ); } catch ( ClassNotFoundException e ) { e.printStackTrace ( ); } try ( Connection conn = DriverManager.getConnection ( "jdbc:h2:mem:trash_me_db_" ) ; Statement stmt = conn.createStatement ( ) ; ) { String tableName = "test_"; String sql = "CREATE TABLE " + tableName + " (\n" + " id_ UUID DEFAULT random_uuid() PRIMARY KEY ,\n" + " date_ DATE NOT NULL\n" + ");"; stmt.execute ( sql ); // Insert row. sql = "INSERT INTO test_ ( date_ ) " + "VALUES (?) ;"; try ( PreparedStatement preparedStatement = conn.prepareStatement ( sql ) ; ) { LocalDate today = LocalDate.now ( ZoneId.of ( "America/Montreal" ) ); preparedStatement.setObject ( 1 , today.minusDays ( 1 ) ); // Yesterday. preparedStatement.executeUpdate ( ); preparedStatement.setObject ( 1, today ); // Today. preparedStatement.executeUpdate ( ); preparedStatement.setObject ( 1, today.plusDays ( 1 ) ); // Tomorrow. preparedStatement.executeUpdate ( ); } // Query all. sql = "SELECT * FROM test_"; try ( ResultSet rs = stmt.executeQuery ( sql ) ; ) { while ( rs.next ( ) ) { UUID id = rs.getObject ( "id_" , UUID.class ); // Pass the class to be type-safe. LocalDate localDate = rs.getObject ( "date_", LocalDate.class ); // Pass class for type-safety. System.out.println ( "id_: " + id + " | date_: " + 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!

Commencez le printemps à l'aide de la version IntelliJideaultimate ...

Lorsque vous utilisez MyBatis-Plus ou d'autres cadres ORM pour les opérations de base de données, il est souvent nécessaire de construire des conditions de requête en fonction du nom d'attribut de la classe d'entité. Si vous manuellement à chaque fois ...

Java...

Comment la solution de mise en cache Redis réalise-t-elle les exigences de la liste de classement des produits? Pendant le processus de développement, nous devons souvent faire face aux exigences des classements, comme l'affichage d'un ...

Conversion des objets et des tableaux Java: Discussion approfondie des risques et des méthodes correctes de la conversion de type de distribution De nombreux débutants Java rencontreront la conversion d'un objet en un tableau ...

Solutions pour convertir les noms en nombres pour implémenter le tri dans de nombreux scénarios d'applications, les utilisateurs peuvent avoir besoin de trier en groupe, en particulier en un ...

Explication détaillée de la conception des tables SKU et SPU sur les plates-formes de commerce électronique Cet article discutera des problèmes de conception de la base de données de SKU et SPU dans les plateformes de commerce électronique, en particulier comment gérer les ventes définies par l'utilisateur ...

Comment définir la liste de configuration d'exécution du projet Springboot dans l'idée en utilisant Intellij ...


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Version Mac de WebStorm
Outils de développement JavaScript utiles

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.