アプリ版:「スタンプのみでお礼する」機能のリリースについて

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)

【 以上コンソール 】

A 回答 (1件)

while の処理の中で st に対して再度SQLを発行してたり、rs を上書きしてたりしませんか?


でなければ通常Exceptionは出ないと思われるのですが…

あとcloseの順番は
rs、st、con の順番の方が良いと思われます。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

正に、whileの中で再度SQLを発行しておりました。
Statementを別名でもう一つ宣言しましたら、
きれいに処理が終わりました。

ありがとうございました。

お礼日時:2005/09/02 13:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す