Transactions et traitement par lots

Interroger une base de données PostgreSQL en Java

Miller Trujillo

Staff Software Engineer

Quel est le problème ?

  • Transaction : un filet de sécurité pour les opérations de base de données
  • Toutes les opérations réussissent ou échouent ensemble

$$

$$

Exemple de transaction de transfert bancaire

Interroger une base de données PostgreSQL en Java

Les propriétés ACID

  • Atomicité : opérations complètes ou aucune n'est appliquée
  • Cohérence : la base reste valide
  • Isolation : empêche les interférences entre opérations
  • Pérennité : les transactions réussies sont permanentes

Propriétés ACID

  • Par défaut, JDBC fonctionne en mode auto-commit 🔄
Interroger une base de données PostgreSQL en Java

Contrôle des transactions dans JDBC

Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD)
conn.setAutoCommit(false);

try (...) { // Exécutez vos instructions SQL ici
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Interroger une base de données PostgreSQL en Java

Exemple de transfert bancaire

// Réduire le solde de l'expéditeur
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Augmenter le solde du destinataire String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - modifie les lignes existantes dans une table
  • SET - spécifie les colonnes à changer
Interroger une base de données PostgreSQL en Java

Exemple de transfert bancaire

try (Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD)) {

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Définir les paramètres et exécuter les deux instructions... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Interroger une base de données PostgreSQL en Java

Traitement par lots

  • Regroupe plusieurs opérations

$$

Capture d'écran 2025-12-03 à 10.40.25.png

Interroger une base de données PostgreSQL en Java

Exemple de traitement par lots

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO transfers
   (sender_id, recipient_id, amount) VALUES (?, ?, ?)")

for (Object[] transfer : transfers) { pstmt.setInt(1, (Integer) transfer[0]); pstmt.setInt(2, (Integer) transfer[1]); pstmt.setInt(3, (Integer) transfer[2]);
pstmt.addBatch(); // Enfile pour plus tard }
int[] results = pstmt.executeBatch(); // Envoie tout d'un coup
Interroger une base de données PostgreSQL en Java

Passons à la pratique !

Interroger une base de données PostgreSQL en Java

Preparing Video For Download...