3

私はTomcatでJavaで書かれたウェブアプリを持っています。すべての接続はautoCommit=falseデフォルトであるはずです。ここで、トランザクションでのみSELECTステートメントを実行するとします。それでも電話をかける必要がありますcommit()か、それとも接続を閉じるだけで十分ですか?

その価値について:私はOracle11.2を使用しています。

同様の質問がありますが、実際にはこの場合の答えはありません。

4

2 に答える 2

6

接続を閉じるだけで十分であり、commitまたはを呼び出す必要はありませんrollback

ただし、connection.close()によると、commitまたはrollbackのいずれかを呼び出すことをお勧めします。

于 2013-03-27T10:08:09.377 に答える
1

selectステートメントは、基になるモデルまたはモデル内に含まれるデータを妨害しません。トランザクションに関連するコマンド(など)を呼び出さずに接続を閉じるのは安全commitです。

実際にそれを打つ。私は最初の答えでモデルに対して行われた隣接する選択を考慮していませんでした。実行select id from users where age > 20してフォローアップするとしselect id from users where age = 20ます。これらのクエリ間で行われた更新は、選択のACIDの性質に影響を与え、2つのクエリ内で重複した結果を返します。一貫した結果を保証するには、commit()を使用して両方の選択を同じトランザクションでラップする必要があります。

そうです、あなたの選択をコミットすることは理にかなっています。

于 2013-03-27T10:09:23.757 に答える