- - PR -
ResultSet/Statementのクローズについて。
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-04 19:21
セッションにコネクションを保持してはいけません。 セッションの数だけ、使われない無駄なConnectionが開きっぱなしになってしまいます。
絶対にConnection変数/オブジェクトを使いまわしてはいけません。 複数スレッドから非同期に操作されて、ストレージとしてのDBの意味が全くなくなります。 例えば、一つのConnectionに対して (スレッド1): executeUpdate("insert into tableA values (***)"); (スレッド2): conn.rollback(); (スレッド1): conn.commit(); の順に実行された場合、 スレッド1ではtableAに行を追加したつもりなのに実際は何も追加されないことになります。 こんなプログラム信用できますか?
絶対にグローバル変数にしてはいけません。Connectionと全く同じ理由です。 必ずローカル変数にする必要があります。 (スレッド1): rs = executeQuery("select * from tableA"); (スレッド2): rs = executeQuery("select * from tableB"); スレッド1の次のコードはどうなりますか?
Connection,PreparedStatement,ResultSetはすべてローカル変数にしましょう。絶対です。 共有していいのは唯一javax.sql.DataSourceオブジェクトだけです。 [ メッセージ編集済み 編集者: kito 編集日時 2005-02-04 19:23 ] |