Transacties en batchverwerking

Query's uitvoeren op een PostgreSQL-database in Java

Miller Trujillo

Staff Software Engineer

Wat is het probleem?

  • Transactie: een vangnet voor database-operaties
  • Alle operaties slagen of falen samen

$$

$$

Voorbeeld bankoverschrijvingstransactie

Query's uitvoeren op een PostgreSQL-database in Java

De ACID-eigenschappen

  • Atomiciteit: operaties voltooien of geen enkele
  • Consistentie: database blijft geldig
  • Isolatie: voorkomt interferentie tussen operaties
  • Duurzaamheid: voltooide transacties blijven permanent

ACID-eigenschappen

  • Standaard draait JDBC in auto-commit modus 🔄
Query's uitvoeren op een PostgreSQL-database in Java

Transactiebeheer in JDBC

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

try (...) { // Voer hier je SQL-instructies uit
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Query's uitvoeren op een PostgreSQL-database in Java

Voorbeeld bankoverschrijving

// Verminder het saldo van de verzender
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Verhoog het saldo van de ontvanger String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - wijzigt bestaande rijen in een tabel
  • SET - specificeert welke kolommen te wijzigen
Query's uitvoeren op een PostgreSQL-database in Java

Voorbeeld bankoverschrijving

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Stel parameters in en voer beide instructies uit... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Query's uitvoeren op een PostgreSQL-database in Java

Batchverwerking

  • Groepeert meerdere operaties

$$

Screenshot 2025-12-03 at 10.40.25.png

Query's uitvoeren op een PostgreSQL-database in Java

Voorbeeld batchverwerking

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(); // In de wachtrij zetten }
int[] results = pstmt.executeBatch(); // Alles in één keer verzenden
Query's uitvoeren op een PostgreSQL-database in Java

Laten we oefenen!

Query's uitvoeren op een PostgreSQL-database in Java

Preparing Video For Download...