dポイントプレゼントキャンペーン実施中!

お世話になっています。
現在、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) {}

この場合、どこが間違っているのでしょうか?
宜しくお願いします。

A 回答 (2件)

ソース自体に色々かなり相当疑問がありますが、



ひとまずba == falseが通ったあとに、rs.next()やったら例外は起きそうですね。面倒なので試してません。
    • good
    • 0
この回答へのお礼

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

原因は、rsをnullにしていなかったからだったみたいです。

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

お礼日時:2009/08/19 17:36

> if(con !=null && stmt != null && rs !=null)


この部分かな?

ここよか前にもろもろをcloseしてるけども
closeしたところでnullにならないんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2009/08/19 17:34

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