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) {}
この場合、どこが間違っているのでしょうか?
宜しくお願いします。
お礼
ありがとうございます。 npgsqlのconnection stringsのcommand timeoutを任意の秒数、または0をセットすることでタイムアウトしないようになりました!