6

jdbc for oracleデータベースで開いている接続を確認するにはどうすればよいですか?

注:conn.isClosed()これには使用できません。

4

4 に答える 4

8

何かのようなもの:

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 )。

于 2008-11-08T16:07:44.497 に答える
2

通常、接続プールは Connection.isClosed() メソッドも使用して、接続がまだ有効かどうかを確認します。問題は、すべての JDBC ドライバーがこの呼び出しを正しく処理するわけではないことです。したがって、RealHowTo が言ったように、いくつかの簡単なチェック ステートメントがあると思います。Oracle の場合、彼はすでに「SELECT 1 FROM Dual」について言及しており、これは Oracle データベースでは常に成功するはずです。異なるデータベースに対して同様のクエリがあると思います。以前のプロジェクトでは、このような検証クエリを使用する独自の接続プールも実装したことを覚えています。

于 2008-11-19T11:41:29.437 に答える
1

この投稿を参照してください。

参照されているソリューションは、ここに掲載されているものと似ていますが (検証のために DUAL に対するクイック クエリ)、Oracle JDBC Connection クラスで独自の PING メソッドを使用する Oracle 固有の JBoss によって提供される興味深いソリューションもあります。こちらのコードを参照してください。

//ニコラス

于 2009-01-05T18:16:07.170 に答える
1

pingDatabase(int timeout)を使用します。9.0.1 以降、OracleConnection に実装されています。

于 2009-11-19T15:24:58.640 に答える