программно проверять открытое соединение в JDBC - PullRequest
6 голосов
/ 08 ноября 2008

Как проверить наличие открытого соединения в jdbc для базы данных Oracle?

Примечание: conn.isClosed() не может быть использовано для этого.

Ответы [ 4 ]

8 голосов
/ 08 ноября 2008

Что-то вроде:

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 голосов
/ 19 ноября 2008

Обычно пул соединений также использует метод Connection.isClosed (), чтобы проверить, действительно ли соединение еще действует. Проблема в том, что не все драйверы JDBC будут правильно обрабатывать этот вызов. Поэтому я предполагаю, что есть несколько простых проверочных операторов, как сказал RealHowTo. Для Oracle он уже упомянул «SELECT 1 FROM Dual», который всегда должен выполняться для баз данных Oracle. Я думаю, что есть похожие запросы для другой базы данных. Я могу вспомнить, что в предыдущем проекте мы также реализовали собственный пул подключений, который использовал такие запросы проверки.

1 голос
/ 19 ноября 2009

Использовать pingDatabase (int timeout) Реализовано в OracleConnection с 9.0.1

1 голос
/ 05 января 2009

См. это сообщение.

Указанные решения аналогичны приведенным здесь (быстрый запрос к DUAL для проверки), но есть также интересное решение, предоставленное JBoss, специфичное для Oracle, использующее собственный метод PING в классе Oracle JDBC Connection. Смотрите код здесь .

// Николай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...