Transazioni e elaborazione batch

Eseguire query su un database PostgreSQL in Java

Miller Trujillo

Staff Software Engineer

Qual è il problema?

  • Transazione: una rete di sicurezza per le operazioni sul database
  • Tutte le operazioni riescono o falliscono insieme

$$

$$

Esempio di transazione di trasferimento bancario

Eseguire query su un database PostgreSQL in Java

Le proprietà ACID

  • Atomicità: le operazioni si completano o nessuna si applica
  • Consistenza: il database rimane valido
  • Isolamento: impedisce alle operazioni di interferire tra loro
  • Durabilità: le transazioni completate persistono permanentemente

Proprietà ACID

  • Di default, JDBC funziona in modalità auto-commit 🔄
Eseguire query su un database PostgreSQL in Java

Controllo delle transazioni in JDBC

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

try (...) { // Esegui qui le tue istruzioni SQL
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Eseguire query su un database PostgreSQL in Java

Esempio di trasferimento bancario

// Riduci il saldo del mittente
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Aumenta il saldo del destinatario String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - modifica le righe esistenti in una tabella
  • SET - specifica quali colonne cambiare
Eseguire query su un database PostgreSQL in Java

Esempio di trasferimento bancario

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Imposta i parametri ed esegui entrambe le istruzioni... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Eseguire query su un database PostgreSQL in Java

Elaborazione batch

  • Raggruppa più operazioni

$$

Screenshot 2025-12-03 at 10.40.25.png

Eseguire query su un database PostgreSQL in Java

Esempio di elaborazione batch

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(); // Accoda per dopo }
int[] results = pstmt.executeBatch(); // Invia tutto insieme
Eseguire query su un database PostgreSQL in Java

Ayo berlatih!

Eseguire query su un database PostgreSQL in Java

Preparing Video For Download...