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

时间:2008-11-08 15:24:37

标签: java oracle jdbc

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

注意:conn.isClosed()不能用于此。

4 个答案:

答案 0 :(得分:8)

类似的东西:

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

请注意,如果连接来自连接池(例如,在Application Server中),则池可能具有检查连接是否有效的机制。使用BEA,您可以在“test-on-reserve”属性中指定SELECT。

如果您正在开发自己的游泳池,那么您可能想看看其他人如何做到这一点(例如Proxool)。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

请参阅this发帖。

引用的解决方案类似于此处发布的解决方案(针对DUAL进行快速查询以验证),但是使用Oracle JDBC Connection类中的专有PING方法,特定于Oracle的JBoss也提供了一个有趣的解决方案。请参阅代码here

//尼古拉斯

答案 3 :(得分:1)

使用pingDatabase(int timeout) 自9.0.1以来在OracleConnection中实现