jdbc for oracleデータベースで開いている接続を確認するにはどうすればよいですか?
注:conn.isClosed()
これには使用できません。
何かのようなもの:
Statement stmt = null;
ResultSet rs =null;
try {
stmt = conn.createStatement();
// oracle
rs = stmt.executeQuery("SELECT 1 FROM Dual");
// others
// rs = stmt.executeQuery("SELECT 1");
if (rs.next())
return true; // connection is valid
}
catch (SQLException e) {
// TODO : log the exception ...
return false;
}
finally {
if (stmt != null) stmt.close();
if (rs != null) rs.close();
}
接続が接続プール (アプリケーション サーバーなど) からのものである場合、接続が有効かどうかをチェックするメカニズムがプールにある場合があることに注意してください。BEA では、「test-on-reserve」プロパティで SELECT を指定します。
独自のプールを開発している場合は、他の人がどのようにそれを行っているかを調べたいと思うかもしれません (例: Proxool )。
通常、接続プールは Connection.isClosed() メソッドも使用して、接続がまだ有効かどうかを確認します。問題は、すべての JDBC ドライバーがこの呼び出しを正しく処理するわけではないことです。したがって、RealHowTo が言ったように、いくつかの簡単なチェック ステートメントがあると思います。Oracle の場合、彼はすでに「SELECT 1 FROM Dual」について言及しており、これは Oracle データベースでは常に成功するはずです。異なるデータベースに対して同様のクエリがあると思います。以前のプロジェクトでは、このような検証クエリを使用する独自の接続プールも実装したことを覚えています。
pingDatabase(int timeout)を使用します。9.0.1 以降、OracleConnection に実装されています。