私は次の方法で(正常に)データベースに接続しています。
_Java.sql.Connection connect = DriverManager.getConnection(
"jdbc:mysql://localhost/some_database?user=some_user&password=some_password");
_
しばらくして接続が開いたままであるかどうかを確認するにはどうすればよいですか?
使用できるconnect.isConnected();
のようなものを望んでいました。
なし。クエリを実行するだけです。接続が停止した場合、JDBCドライバーは再接続します(サポートしている場合、接続文字列で有効にしていますが、ほとんどはサポートしていません)。そうしないと、例外が発生します。
接続が確立されていることを確認すると、実際にクエリを実行する前に接続が失敗する可能性があるため、確認してもまったく何も得られません。
ただし、多くの接続プールは、SELECT 1
接続を渡す前に。しかし、これは単にクエリを実行する以上のものではないため、ビジネスクエリを実行することもできます。
あなたの最善のチャンスは、1つのテーブルに対して単純なクエリを実行することです、例えば:
_select 1 from SOME_TABLE;
_
ああ、私はちょうど1.6から利用可能な新しい方法があるのを見ました:
Java.sql.Connection.isValid(int timeoutSeconds)
:
接続が閉じられておらず、まだ有効な場合はtrueを返します。ドライバーは、接続でクエリを送信するか、このメソッドが呼び出されたときに接続がまだ有効であることを明確に検証する他のメカニズムを使用します。接続を検証するためにドライバーによって送信されたクエリは、現在のトランザクションのコンテキストで実行されます。
Connection.isClosed()
関数を使用します。
JavaDoc 状態:
この
Connection
オブジェクトが閉じられたかどうかを取得します。メソッドcloseが呼び出された場合、または特定の致命的なエラーが発生した場合、接続は閉じられます。このメソッドは、Connection.closeメソッドが呼び出された後に呼び出されたときにのみ、true
を返すことが保証されています。
また使用できます
public boolean isDbConnected(con Connection) {
//final String CHECK_SQL_QUERY = "SELECT 1";
try {
if(!con.isClosed() || con!=null){
return true;
}
} catch (SQLException e) {
return false;
}
return false;
}
MySQLを使用している場合
public static boolean isDbConnected() {
final String CHECK_SQL_QUERY = "SELECT 1";
boolean isConnected = false;
try {
final PreparedStatement statement = db.prepareStatement(CHECK_SQL_QUERY);
isConnected = true;
} catch (SQLException | NullPointerException e) {
// handle SQL error here!
}
return isConnected;
}
私は他のデータベースでテストしていません。これが役に立てば幸いです。
ベンダーの実装に関係なく、低コストの方法は、DBバージョンや現在のデータベースの名前など、プロセスメモリまたはサーバーメモリから何かを選択することです。 IsClosedの実装は非常に不十分です。
例:
Java.sql.Connection conn = <connect procedure>;
conn.close();
conn.getMetaData();