私はTomcatでJavaで書かれたウェブアプリを持っています。すべての接続はautoCommit=false
デフォルトであるはずです。ここで、トランザクションでのみSELECTステートメントを実行するとします。それでも電話をかける必要がありますcommit()
か、それとも接続を閉じるだけで十分ですか?
その価値について:私はOracle11.2を使用しています。
同様の質問がありますが、実際にはこの場合の答えはありません。
私はTomcatでJavaで書かれたウェブアプリを持っています。すべての接続はautoCommit=false
デフォルトであるはずです。ここで、トランザクションでのみSELECTステートメントを実行するとします。それでも電話をかける必要がありますcommit()
か、それとも接続を閉じるだけで十分ですか?
その価値について:私はOracle11.2を使用しています。
同様の質問がありますが、実際にはこの場合の答えはありません。
接続を閉じるだけで十分であり、commit
またはを呼び出す必要はありませんrollback
。
ただし、connection.close()によると、commitまたはrollbackのいずれかを呼び出すことをお勧めします。
selectステートメントは、基になるモデルまたはモデル内に含まれるデータを妨害しません。トランザクションに関連するコマンド(など)を呼び出さずに接続を閉じるのは安全commit
です。
実際にそれを打つ。私は最初の答えでモデルに対して行われた隣接する選択を考慮していませんでした。実行select id from users where age > 20
してフォローアップするとしselect id from users where age = 20
ます。これらのクエリ間で行われた更新は、選択のACIDの性質に影響を与え、2つのクエリ内で重複した結果を返します。一貫した結果を保証するには、commit()を使用して両方の選択を同じトランザクションでラップする必要があります。
そうです、あなたの選択をコミットすることは理にかなっています。