программно проверяя на открытое соединение в JDBC

Оператор && не является неявным образом приведенным к логическому значению. Что на самом деле происходит:

A && B && C
// if A is falsy return A
// else return B && C
//      if B is falsy return B
//      else return C

в вашем случае у вас есть три возможности:

  1. obj не определен -> возвращает undefined
  2. объект определен, но someProperty не определено -> возвращает неопределенное
  3. объект obj определен и someProperty определен -> возвращает некоторое свойство (в данном случае строка)
6
задан sblundy 8 November 2008 в 15:59
поделиться

4 ответа

Обычно Пул Соединения будет также использовать Connection.isClosed () метод, чтобы проверить, является ли Соединение все еще подходящим. Проблема состоит в том, что не все драйверы JDBC обработают этот вызов правильно. Таким образом, я предполагаю, что существуют некоторые простые операторы проверки точно так же, как RealHowTo заявил. Для Oracle он уже упомянул "ВЫБОР 1 ОТ Двойного", который должен всегда успешно выполняться для баз данных Oracle. Я думаю, что существуют подобные запросы для другой базы данных. Я могу помнить, что в предыдущем проекте мы также реализовали собственный Пул Соединения, который использовал такие запросы проверки.

2
ответ дан 9 December 2019 в 20:50
поделиться

Что-то как:

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 Вы указываете ВЫБОР в свойстве "теста на резерве".

При разработке собственного объединения затем, можно хотеть смотреть на то, как другие делают его (напр. Proxool).

8
ответ дан 9 December 2019 в 20:50
поделиться

Посмотрите эту регистрацию.

Решения, на которые ссылаются, аналогичны тому, отправленному здесь (быстрый запрос против ДВОЙНОГО для проверки), но существует также интересное решение, предоставленное JBoss, характерным для Oracle с помощью собственного метода PING в классе соединения JDBC Oracle. См. код здесь.

//Nicholas

1
ответ дан 9 December 2019 в 20:50
поделиться

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

1
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: