Transaktionen und Batch-Verarbeitung

Abfragen einer PostgreSQL-Datenbank in Java

Miller Trujillo

Staff Software Engineer

Was ist das Problem?

  • Transaktion: Sicherheitsnetz für Datenbankoperationen
  • Alle Operationen gelingen oder scheitern zusammen

$$

$$

Beispiel für Banküberweisungstransaktion

Abfragen einer PostgreSQL-Datenbank in Java

Die ACID-Eigenschaften

  • Atomicity: Alles oder nichts
  • Consistency: Datenbank bleibt gültig
  • Isolation: Verhindert Störungen zwischen Operationen
  • Durability: Transaktionen bleiben dauerhaft

ACID-Eigenschaften

  • Standardmäßig läuft JDBC im Auto-Commit-Modus 🔄
Abfragen einer PostgreSQL-Datenbank in Java

Transaktionskontrolle in JDBC

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

try (...) { // Führe hier deine SQL-Anweisungen aus
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Abfragen einer PostgreSQL-Datenbank in Java

Beispiel für Banküberweisung

// Reduziere das Guthaben des Absenders
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Erhöhe das Guthaben des Empfängers String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - ändert bestehende Zeilen in einer Tabelle
  • SET - gibt an, welche Spalten geändert werden
Abfragen einer PostgreSQL-Datenbank in Java

Beispiel für Banküberweisung

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Setze Parameter und führe beide Anweisungen aus... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Abfragen einer PostgreSQL-Datenbank in Java

Batch-Verarbeitung

  • Gruppiert mehrere Operationen

$$

Screenshot 2025-12-03 at 10.40.25.png

Abfragen einer PostgreSQL-Datenbank in Java

Beispiel für Batch-Verarbeitung

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 Warteschlange }
int[] results = pstmt.executeBatch(); // Alles auf einmal senden
Abfragen einer PostgreSQL-Datenbank in Java

Lass uns üben!

Abfragen einer PostgreSQL-Datenbank in Java

Preparing Video For Download...