Javaのデータベース接続(JDBC)におけるトランザクション管理とは、複数のデータベース操作(INSERT、UPDATE、DELETEなど)をひとまとまりの処理単位(トランザクション)として管理し、一貫性・整合性を確保するための仕組みです。トランザクションは、「すべて成功する」か「すべて元に戻す(ロールバック)」かのどちらかで完了します。
1. 自動コミットと手動コミット
JDBCでは、**デフォルトで自動コミットモード(auto-commit)**になっています。これは、各SQL文の実行後に即座にコミットが行われることを意味します。
トランザクション管理を行うには、自動コミットを無効化し、明示的にコミットまたはロールバックを行う必要があります。
2. トランザクション管理の基本構文
以下は典型的なJDBCのトランザクション処理の例です。
3. トランザクション管理のポイント
-
原子性(Atomicity): 一連の処理がすべて成功するか、まったく行われなかったことになる。
-
一貫性(Consistency): トランザクション実行前後でデータベースが整合性のある状態にあること。
-
分離性(Isolation): 複数トランザクションが同時に実行されても互いに影響を与えないようにする。
-
永続性(Durability): コミット後のデータは確実に保存される。
4. 分離レベル(Isolation Level)
JDBCでは、以下のようなトランザクション分離レベルを設定できます。
| レベル名 | 定数 | 説明 |
|---|---|---|
| TRANSACTION_READ_UNCOMMITTED | Connection.TRANSACTION_READ_UNCOMMITTED |
他トランザクションの未確定変更を読める(非推奨) |
| TRANSACTION_READ_COMMITTED | Connection.TRANSACTION_READ_COMMITTED |
コミット済みの変更だけを読める |
| TRANSACTION_REPEATABLE_READ | Connection.TRANSACTION_REPEATABLE_READ |
同じクエリが常に同じ結果を返す |
| TRANSACTION_SERIALIZABLE | Connection.TRANSACTION_SERIALIZABLE |
完全な分離(最も厳密だが遅い) |
まとめ
JDBCでのトランザクション管理は、業務処理の正確性とデータ整合性を保つために不可欠です。autoCommit(false) を使ってトランザクションを開始し、commit() または rollback() により結果を確定または取消すことが基本です。特に、複数のSQL文が相互に依存している場合には、必ずトランザクションを明示的に管理する必要があります。
生成日:2025/05/03