programmatically checking for open connection in JDBC

前端 未结 4 993
无人共我
无人共我 2020-12-18 05:26

How do I check for an open connection in jdbc for oracle database?

Note: conn.isClosed() cannot be used for this.

相关标签:
4条回答
  • 2020-12-18 05:54

    Usually a Connection Pool will also use the Connection.isClosed() method to check if the Connection is still valid. The problem is that not all JDBC drivers will handle this call correctly. So I assume that there are some simple check statements just like RealHowTo said. For Oracle he already mentioned the "SELECT 1 FROM Dual" which should succeed always for Oracle databases. I think that there are similar queries for the different database. I can remember that in a previous project we also implemented an own Connection Pool which used such validation queries.

    0 讨论(0)
  • 2020-12-18 05:54

    Something like:

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

    Note that if the connection is coming from a Connection Pool (in a Application Server for example) then the Pool may have a mechanism to check if a connection is valid or not. With BEA, you specify the SELECT in the "test-on-reserve" property.

    If you are developing your own pool then you may want to take a look at how others are doing it (ex. Proxool).

    0 讨论(0)
  • 2020-12-18 05:54

    See this posting.

    The referenced solutions are similar to the one posted here (quick query against DUAL to validate) but there is also an interesting solution provided by JBoss specific to Oracle using the proprietary PING method in the Oracle JDBC Connection class. See the code here.

    //Nicholas

    0 讨论(0)
  • 2020-12-18 06:03

    Use pingDatabase(int timeout) Implemented in OracleConnection since 9.0.1

    0 讨论(0)
提交回复
热议问题