web-dev-qa-db-ja.com

Java JDBC接続ステータス

私は次の方法で(正常に)データベースに接続しています。

_Java.sql.Connection connect = DriverManager.getConnection(
  "jdbc:mysql://localhost/some_database?user=some_user&password=some_password");
_

しばらくして接続が開いたままであるかどうかを確認するにはどうすればよいですか?
使用できるconnect.isConnected();のようなものを望んでいました。

37
MonoThreaded

なし。クエリを実行するだけです。接続が停止した場合、JDBCドライバーは再接続します(サポートしている場合、接続文字列で有効にしていますが、ほとんどはサポートしていません)。そうしないと、例外が発生します。

接続が確立されていることを確認すると、実際にクエリを実行する前に接続が失敗する可能性があるため、確認してもまったく何も得られません。

ただし、多くの接続プールは、SELECT 1接続を渡す前に。しかし、これは単にクエリを実行する以上のものではないため、ビジネスクエリを実行することもできます。

24
dty

あなたの最善のチャンスは、1つのテーブルに対して単純なクエリを実行することです、例えば:

_select 1 from SOME_TABLE;
_

ああ、私はちょうど1.6から利用可能な新しい方法があるのを見ました:

Java.sql.Connection.isValid(int timeoutSeconds)

接続が閉じられておらず、まだ有効な場合はtrueを返します。ドライバーは、接続でクエリを送信するか、このメソッドが呼び出されたときに接続がまだ有効であることを明確に検証する他のメカニズムを使用します。接続を検証するためにドライバーによって送信されたクエリは、現在のトランザクションのコンテキストで実行されます。

44
home

Connection.isClosed()関数を使用します。

JavaDoc 状態:

このConnectionオブジェクトが閉じられたかどうかを取得します。メソッドcloseが呼び出された場合、または特定の致命的なエラーが発生した場合、接続は閉じられます。このメソッドは、Connection.closeメソッドが呼び出された後に呼び出されたときにのみ、trueを返すことが保証されています。

16
Buhake Sindi

また使用できます

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;
}
8

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;
}

私は他のデータベースでテストしていません。これが役に立てば幸いです。

4
Madan Sapkota

ベンダーの実装に関係なく、低コストの方法は、DBバージョンや現在のデータベースの名前など、プロセスメモリまたはサーバーメモリから何かを選択することです。 IsClosedの実装は非常に不十分です。

例:

Java.sql.Connection conn = <connect procedure>;
conn.close();
conn.getMetaData();
0
access_granted