就像是:
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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果连接来自连接池(例如,在Application Server中),则池可能具有检查连接是否有效的机制.使用BEA,您可以在"test-on-reserve"属性中指定SELECT.
如果您正在开发自己的池,那么您可能想看看其他人是如何做到的(例如Proxool).
通常连接池还会使用 Connection.isClosed() 方法来检查连接是否仍然有效。问题是并非所有 JDBC 驱动程序都能正确处理此调用。所以我假设有一些简单的检查语句,就像 RealHowTo 所说的那样。对于 Oracle,他已经提到了“SELECT 1 FROM Dual”,这对于 Oracle 数据库应该总是成功的。我认为不同的数据库有类似的查询。我记得在之前的项目中,我们还实现了一个自己的连接池,它使用了此类验证查询。
归档时间: |
|
查看次数: |
25475 次 |
最近记录: |