Как проверить наличие открытого соединения в jdbc для базы данных Oracle?
Примечание: conn.isClosed()
для этого использовать нельзя.
Как проверить наличие открытого соединения в jdbc для базы данных Oracle?
Примечание: conn.isClosed()
для этого использовать нельзя.
conn.isValid(timeout)
< / a> был введен для этой конкретной цели и действительно реализован во многих драйверах JDBC. 03.09.2015 Обычно пул соединений также использует метод Connection.isClosed (), чтобы проверить, действительно ли соединение по-прежнему. Проблема в том, что не все драйверы JDBC будут правильно обрабатывать этот вызов. Итак, я предполагаю, что есть несколько простых проверочных заявлений, как и сказал RealHowTo. Для Oracle он уже упоминал «SELECT 1 FROM Dual», который всегда должен работать с базами данных Oracle. Я думаю, что есть похожие запросы к разным базам данных. Я помню, что в предыдущем проекте мы также реализовали собственный пул соединений, который использовал такие запросы проверки.
Что-то типа:
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 в свойстве «test-on-reserve».
Если вы разрабатываете свой собственный пул, вы можете посмотреть, как это делают другие (например, Proxool).
См. это публикация.
Упомянутые решения аналогичны размещенному здесь (быстрый запрос к DUAL для проверки), но есть также интересное решение, предоставляемое JBoss, специфичным для Oracle, с использованием проприетарного метода PING в классе Oracle JDBC Connection. См. Код здесь.
// Николай
Используйте pingDatabase (int timeout) Реализовано в OracleConnection с 9.0.1