トランザクションとバッチ処理

Java で PostgreSQL データベースにクエリを実行する

Miller Trujillo

Staff Software Engineer

問題とは何か?

  • トランザクション:データベース操作の安全機構
  • すべての操作が成功するか、すべて失敗するか

$$

$$

銀行振込トランザクションの例

Java で PostgreSQL データベースにクエリを実行する

ACIDプロパティ

  • Atomicity(原子性):全操作が完了するか、何も適用されない
  • Consistency(一貫性):データベースの整合性を維持
  • Isolation(独立性):操作間の干渉を防止
  • Durability(永続性):コミット済みトランザクションは永続的に保存

ACIDプロパティ

  • デフォルトでは、JDBCは自動コミットモードで動作する 🔄
Java で PostgreSQL データベースにクエリを実行する

JDBCのトランザクション制御

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

try (...) { // Execute your SQL statements here
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Java で PostgreSQL データベースにクエリを実行する

銀行振込の例

// Reduce the sender's balance
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Increase the recipient's balance String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - テーブルの既存行を変更する
  • SET - 変更する列を指定する
Java で PostgreSQL データベースにクエリを実行する

銀行振込の例

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Set parameters and execute both statements... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Java で PostgreSQL データベースにクエリを実行する

バッチ処理

  • 複数の操作をまとめて処理する

$$

Screenshot 2025-12-03 at 10.40.25.png

Java で PostgreSQL データベースにクエリを実行する

バッチ処理の例

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(); // Queue for later }
int[] results = pstmt.executeBatch(); // Send all at once
Java で PostgreSQL データベースにクエリを実行する

練習しましょう!

Java で PostgreSQL データベースにクエリを実行する

Preparing Video For Download...