DBCP - validationQuery для разных баз данных

Я использую пул DBCP, и я хочу использовать testOnBorrow и testOnReturn для проверки, если соединение все еще действует.
К сожалению, я должен установить свойство validationQuery, чтобы оно работало.

Вопрос: какое значение должно быть в validationQuery?

Я знаю, что: validationQuery должен быть оператором SQL SELECT, который возвращает хотя бы одну строку.

Проблема в том, что мы используем различные базы данных (DB2, Oracle, hsqldb).

4 ответа

Решение

Существует не только один запрос проверки для всех баз данных. На каждой базе данных вы должны использовать разные validationQuery.

После нескольких часов поиска и поиска я собрал эту таблицу:

Проверка базы данных

  • hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
  • Оракул - select 1 from dual
  • DB2 - select 1 from sysibm.sysdummy1
  • mysql - select 1
  • Microsoft SQL Server - select 1 (протестировано на SQL Server 9.0, 10.5 [2008])
  • postgresql - select 1
  • Ингрес - select 1
  • дерби - values 1
  • H2 - select 1
  • Жар-птица - select 1 from rdb$database

Я написал об этом в своем блоге - запрос проверки для различных баз данных.

Заранее есть пример класса, который возвращает validationQuery в соответствии с драйвером JDBC.

Или у кого-нибудь есть лучшее решение?

Для MySQL с драйвером Connector/J существует легкий запрос проверки, который просто отправляет пинг на сервер и возвращает фиктивный набор результатов. Запрос проверки может быть (или должен начинаться с) в точности следующей строки:

/* ping */

Для получения дополнительной информации обратитесь к Проверке соединений в руководстве по драйверу MySQL

Для Informix, запрос проверки: выберите 1 из systables

Для запроса проверки MairaDB это «выберите 1».

Другие вопросы по тегам