복붙노트

[SQL] 자바 JDBC 연결 상태

SQL

자바 JDBC 연결 상태

나는 (성공적으로) 다음을 사용하여 데이터베이스에 연결하고 있습니다 :

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

내가 연결이 여전히 열려 있고 시간 후까지 있는지 확인해야 하는가? 나는 connect.isConnected () 같은 것을 기대했다; 내가 사용하기 위해 사용할 수 있습니다.

해결법

  1. ==============================

    1.아무것도. 그냥 쿼리를 실행합니다. 연결이 사망 한 경우 (그것을 지원하는 경우, 당신은 당신의 연결 문자열을 사용 가능 - 대부분을 지원하지 않습니다), 중 당신의 JDBC 드라이버가 다시 연결됩니다 그렇지 않으면 예외를 얻을 수 있습니다.

    아무것도. 그냥 쿼리를 실행합니다. 연결이 사망 한 경우 (그것을 지원하는 경우, 당신은 당신의 연결 문자열을 사용 가능 - 대부분을 지원하지 않습니다), 중 당신의 JDBC 드라이버가 다시 연결됩니다 그렇지 않으면 예외를 얻을 수 있습니다.

    연결가 당신이 선택하면, 당신이 검사에 의해 절대적으로 아무것도 얻을 수 없다, 그래서 당신은 실제로 당신의 쿼리를 실행하기 전에 넘어 질 수 있습니다.

    즉 연결 풀의 많은 나눠 연결하기 전에 SELECT 1 같은 뭔가를 수행하여 연결을 확인했다. 그러나 이것은 아무것도 더 단순한 쿼리를 실행하는 것보다, 그래서 당신은 단지뿐만 아니라 비즈니스 쿼리를 실행할 수 있습니다.

  2. ==============================

    2.당신의 가장 좋은 기회는 예컨대 하나 개의 테이블에 대해 간단한 쿼리를 수행하는 것입니다 :

    당신의 가장 좋은 기회는 예컨대 하나 개의 테이블에 대해 간단한 쿼리를 수행하는 것입니다 :

    select 1 from SOME_TABLE;
    

    아, 난 그냥 1.6부터 사용할 수있는 새로운 방법이 보았다 :

    java.sql.Connection.isValid (INT의 timeoutSeconds) :

  3. ==============================

    3.사용 Connection.isClosed () 함수.

    사용 Connection.isClosed () 함수.

    Javadoc의 상태 :

  4. ==============================

    4.당신은 또한 사용할 수 있습니다

    당신은 또한 사용할 수 있습니다

    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;
    }
    
  5. ==============================

    5.당신은 MySQL을 사용하는 경우

    당신은 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;
    }
    

    나는 다른 데이터베이스를 테스트하지 않았습니다. 이 도움이됩니다 바랍니다.

  6. ==============================

    6.저가의 방법에 관계없이 공급 업체 구현의 DB 버전 또는 현재 데이터베이스의 이름과 같은 프로세스 메모리 또는 서버 메모리에서 무언가를 선택하는 것입니다. IsClosed은 매우 가난하게 구현됩니다.

    저가의 방법에 관계없이 공급 업체 구현의 DB 버전 또는 현재 데이터베이스의 이름과 같은 프로세스 메모리 또는 서버 메모리에서 무언가를 선택하는 것입니다. IsClosed은 매우 가난하게 구현됩니다.

    예:

    java.sql.Connection conn = <connect procedure>;
    conn.close();
    try {
      conn.getMetaData();
    } catch (Exception e) {
      System.out.println("Connection is closed");
    }
    
  7. from https://stackoverflow.com/questions/7764671/java-jdbc-connection-status by cc-by-sa and MIT license