代码之家  ›  专栏  ›  技术社区  ›  Chaitanya MSV

以编程方式检查JDBC中的打开连接

  •  6
  • Chaitanya MSV  · 技术社区  · 17 年前

    如何在jdbc for oracle数据库中检查开放连接?

    conn.isClosed() 不能用于此。

    4 回复  |  直到 17 年前
        1
  •  8
  •   bluish dmajkic    12 年前

    比如:

    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,可以在“保留测试”属性中指定SELECT。

    Proxool ).

        2
  •  2
  •   reallyinsane    17 年前

    通常,连接池还将使用Connection.isClosed()方法检查连接是否仍然有效。问题是并非所有JDBC驱动程序都能正确处理此调用。所以我假设有一些简单的check语句,就像RealHowTo所说的。对于Oracle,他已经提到了“从双数据库中选择1”,这对于Oracle数据库来说应该总是成功的。我认为对于不同的数据库有相似的查询。我记得在以前的一个项目中,我们还实现了一个自己的连接池,它使用这种验证查询。

        3
  •  1
  •   Community Mohan Dere    9 年前

    this 邮寄。

    参考的解决方案类似于此处发布的解决方案(快速查询双验证),但JBoss也提供了一个有趣的解决方案,该解决方案是针对Oracle的,它使用Oracle JDBC连接类中的专有PING方法。参见代码 here .

    //尼古拉斯

        4
  •  1
  •   Jörgen    16 年前

    pingDatabase(int timeout) 从9.0.1开始在OracleConnection中实现

    推荐文章