Connection#setAutoCommit()のjavadocは次のように読みます。
この接続の自動コミット モードを指定された状態に設定します。接続が自動コミット モードの場合、すべての SQL ステートメントが実行され、個々のトランザクションとしてコミットされます。それ以外の場合、その SQL ステートメントはトランザクションにグループ化され、メソッド コミットまたはメソッド ロールバックの呼び出しによって終了します。デフォルトでは、新しい接続は自動コミット モードです。
ステートメントが完了すると、コミットが発生します。ステートメントが完了する時間は、SQL ステートメントのタイプによって異なります。
- Insert、Update、Delete などの DML ステートメント、および DDL ステートメントの場合、ステートメントは実行が完了するとすぐに完了します。
- Select ステートメントの場合、関連する結果セットが閉じられると、ステートメントは完了します。
- CallableStatement オブジェクトまたは複数の結果を返すステートメントの場合、関連するすべての結果セットが閉じられ、すべての更新カウントと出力パラメーターが取得されると、ステートメントは完了します。
これは、autoCommit がオンになっている場合 (ほぼ常にそうあるべきです)、テーブルから行を選択すると、Connection オブジェクトなどは ResultSet が閉じられるまでその行/テーブルのロックを保持することを意味しますか?
もしそうなら、更新後までResultSetを閉じない限り、行を選択し、列の値に満足している場合、行をすべて1つのアトミックアクションとして更新できるということですか?