※ ChatGPTを利用し、要約された質問です(原文:PreparedStatementについて質問)
PreparedStatementの使い方と注意点
このQ&Aのポイント
PreparedStatementを使用する際には、close処理を忘れずに行うことが重要です。
close処理が抜けていると、ORA-1000 最大オープン・カーソル数を超えるエラーが発生することがあります。
forループ内でのclose処理は避け、ループの外で行うようにしましょう。また、オラクルの設定にも注意が必要です。
すみません。PreparedStatementについて勉強中です。
現在、下記の形で更新処理をしようとしています。
{
for(int i ; i<500;i++){
//PreparedStatementを使って更新処理
classA.updateData();
}
}finally{
//PreparedStatementやResultSetのclose処理
classA.close();
}
実行すると、[ORA-1000 最大オープン・カーソル数を超えました 。]が発生してしまいました。
ネットで探してみると、close処理が抜けていたりすると発生すると書いてありました。
close位置が悪いのでしょうか。(for文の中に入れる?)
オラクルの設定が悪いのでしょうか。
分かりづらい質問で申し訳ないです。
ご指導、また参考になるサイト様がありましたら教えていただきたいです。
よろしくお願いいたします。
お礼
分かりにくい説明にご回答ありがとうございます。 classA.updateData()のなかは、端よって書くと PreparedStatement pstm = con.prepareStatement("UPDATE テーブルA SET 項目A=?"); pstm.setInt(1, 更新値); pstm.executeUpdate(): という感じです。 PreparedStatement,ResultSetで勉強不足で分らないことも多いのですが・・・ 確かに、ループの分だけ「pstmt」が作られます。 ということは、同じSQL文で更新値が違うだけだと if(pstmt!=null){ pstmt = connection.prepareStatement(sql); } とすれば大丈夫ということでしょうか。