Оператор &&
не является неявным образом приведенным к логическому значению. Что на самом деле происходит:
A && B && C
// if A is falsy return A
// else return B && C
// if B is falsy return B
// else return C
в вашем случае у вас есть три возможности:
someProperty
не определено -> возвращает неопределенное someProperty
определен -> возвращает некоторое свойство (в данном случае строка) Обычно Пул Соединения будет также использовать Connection.isClosed () метод, чтобы проверить, является ли Соединение все еще подходящим. Проблема состоит в том, что не все драйверы JDBC обработают этот вызов правильно. Таким образом, я предполагаю, что существуют некоторые простые операторы проверки точно так же, как RealHowTo заявил. Для Oracle он уже упомянул "ВЫБОР 1 ОТ Двойного", который должен всегда успешно выполняться для баз данных 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 Вы указываете ВЫБОР в свойстве "теста на резерве".
При разработке собственного объединения затем, можно хотеть смотреть на то, как другие делают его (напр. Proxool).
Посмотрите эту регистрацию.
Решения, на которые ссылаются, аналогичны тому, отправленному здесь (быстрый запрос против ДВОЙНОГО для проверки), но существует также интересное решение, предоставленное JBoss, характерным для Oracle с помощью собственного метода PING в классе соединения JDBC Oracle. См. код здесь.
//Nicholas
Используйте pingDatabase (int timeout) Реализовано в OracleConnection, начиная с 9.0.1