※ ChatGPTを利用し、要約された質問です(原文:JDBCのバグ?それともプログラム(Java)のバグ?)
JDBCのバグ?それともプログラム(Java)のバグ?
このQ&Aのポイント
JavaからJDBC経由でPostgreSQLにSELECT文を発行し、結果を受けて更に処理をするプログラムを作成しています。
しかし、複数行SELECT文の結果があるにもかかわらず、1回のループで終わってしまい、コネクションが閉じられたというExceptionが発生してしまいます。
この現象はJDBCのバグなのか、プログラムのつくりが悪いのか疑問です。
JDBCのバグ?それともプログラム(Java)のバグ?
JavaからJDBC経由でPostgreSQLにSELECT文を発行し、
結果を受けて更に処理をするプログラムを作成しております。
その際、SELECTの結果をResultSet.next()メソッドを使い、
while文で結果の行数分処理をしようとしております。
しかし、複数行SELECT文の結果があるにもかかわらず、
1回のループで終わってしまい、
後は下記のExceptionが発生してしまいます。
Exceptionを読む限りでは、コネクションが閉じられていると分かるのですが、
プログラムでは一番最後のステップでデータベースとの切断をしております。
この様な現象のときは、JDBCが悪いのでしょうか?それともプログラムのつくりが悪いのでしょうか?
【 以下サンプルソース 】
Connection con = null;
Statement st = null;
ResultSet rs = null;
try{
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection(jdbc:postgresql://localhost:5432/hoge?user=hoge&password=hoge);
st = con.createStatement();
rs = st.executeQuery("select hogehoge from hogerake"); // 必ず複数行戻ります。
while(rs.next()){
// 処理
}
con.close();
st.close();
rs.close();
}catch(Exception e){
e.printstackTrace();
}
【 以上サンプルソース 】
【 以下コンソール 】
org.postgresql.util.PSQLException: Connection is closed. Operation is not permitted.
at org.postgresql.jdbc1.AbstractJdbc1ResultSet.next(AbstractJdbc1ResultSet.java:134)
at jp.co.comsys.felica.ExitManagement.main(ExitManagement.java:10)
【 以上コンソール 】
お礼
早速のご回答ありがとうございます。 正に、whileの中で再度SQLを発行しておりました。 Statementを別名でもう一つ宣言しましたら、 きれいに処理が終わりました。 ありがとうございました。