Transaksi dan pemrosesan batch

Melakukan Query ke Basis Data PostgreSQL di Java

Miller Trujillo

Staff Software Engineer

Apa masalahnya?

  • Transaksi: jaring pengaman untuk operasi basis data
  • Semua operasi berhasil atau gagal bersama

$$

$$

Contoh transaksi transfer bank

Melakukan Query ke Basis Data PostgreSQL di Java

Properti ACID

  • Atomicity: operasi selesai atau tidak ada yang berlaku
  • Consistency: basis data tetap valid
  • Isolation: mencegah operasi saling mengganggu
  • Durability: transaksi selesai bertahan permanen

Properti ACID

  • Secara default, JDBC berjalan dalam mode auto-commit 🔄
Melakukan Query ke Basis Data PostgreSQL di Java

Kontrol transaksi di JDBC

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

try (...) { // Jalankan pernyataan SQL Anda di sini
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Melakukan Query ke Basis Data PostgreSQL di Java

Contoh transfer bank

// Kurangi saldo pengirim
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Tambah saldo penerima String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - memodifikasi baris yang ada dalam tabel
  • SET - menentukan kolom mana yang diubah
Melakukan Query ke Basis Data PostgreSQL di Java

Contoh transfer bank

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Setel parameter dan jalankan kedua pernyataan... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Melakukan Query ke Basis Data PostgreSQL di Java

Pemrosesan batch

  • Mengelompokkan beberapa operasi bersama

$$

Screenshot 2025-12-03 at 10.40.25.png

Melakukan Query ke Basis Data PostgreSQL di Java

Contoh pemrosesan 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(); // Antri untuk nanti }
int[] results = pstmt.executeBatch(); // Kirim sekaligus
Melakukan Query ke Basis Data PostgreSQL di Java

Ayo berlatih!

Melakukan Query ke Basis Data PostgreSQL di Java

Preparing Video For Download...