• 締切済み

postgresql接続時

お世話になっています。 現在、postgresqlに接続し、指定のデータがなければ、dbを切断し、 切断中に、dbに接続されたら、エラーを発生させるようなプログラムを作成しています。 その際、org.postgresql.util.PSQLException: This ResultSet is closed.のようなエラーが発生します。 原因として、ResultSetにあるというのはわかるのですが、 ソースは、以下のように組んでいます。 static Connection con = null; static Statement stmt = null; static ResultSet rs ;; try { Class.forName("org.postgresql.Driver"); // PostgreSQLの場合 con = DriverManager.getConnection ("jdbc:postgresql:sample","moon","post"); // ステートメントオブジェクトを生成 stmt = con.createStatement(); String sql = " select id,pw from login where id='test' and pw='a'"; System.out.println(sql); // クエリーを実行して結果セットを取得 rs = stmt.executeQuery(sql); boolean ba = rs.next(); //もし、idがなければ、dbを閉じる if(ba == false) { System.out.println("rs:"+rs.next()); stmt.close(); con.close(); rs.close(); } catch (SQLException e) { } catch (ClassNotFoundException c) { } catch(Exception es) { } finally { } //この時点で、指定のid,pwが存在していないので、dbは切断中 //この状態でdbにアクセスする String sql = " select * from login"; // クエリーを実行して結果セットを取得 try { // ここから if(con !=null && stmt != null && rs !=null) { while(rs.next()) { System.out.println(rs.getString("id")); } }//ここまでが、何かがおかしい else {} } catch (SQLException e) {} この場合、どこが間違っているのでしょうか? 宜しくお願いします。

みんなの回答

  • gwagaw
  • ベストアンサー率18% (11/59)
回答No.2

ソース自体に色々かなり相当疑問がありますが、 ひとまずba == falseが通ったあとに、rs.next()やったら例外は起きそうですね。面倒なので試してません。

kannitiha
質問者

お礼

回答ありがとうございます。 原因は、rsをnullにしていなかったからだったみたいです。 回答ありがとうございました。

  • hejaheja
  • ベストアンサー率0% (0/0)
回答No.1

> if(con !=null && stmt != null && rs !=null) この部分かな? ここよか前にもろもろをcloseしてるけども closeしたところでnullにならないんじゃないでしょうか。

kannitiha
質問者

お礼

回答ありがとうございます。 試したところ、hejahejaさんのおっしゃる通り、 rsに原因がありました。 rs==nullにしたところ、無事解決できました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう