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

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

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

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

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

3 ответов


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

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

база данных validationQuery Примечания

  • hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
  • Oracle - 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