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

84

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

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

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

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

ошибки_
источник
Не снижает ли производительность использование validationQuery? Этот запрос выполняется для каждого подключения, которое получает приложение?
yaswanth

Ответы:

207

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

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

Примечания к запросу

  • 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
  • Ingres -select 1
  • дерби -values 1
  • H2 -select 1
  • Жар-птица -select 1 from rdb$database

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

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

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

ошибок_
источник
4
выбор 1 также действителен на postgresql
Danubian Sailor
select 1также работает для Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20 февраля 2014 г. 20:04:26, Standard Edition (64-разрядная версия) в Windows NT 6.1 <X64> (сборка 7601: пакет обновления 1) (гипервизор)
Юйцы
select 1для Hive and Impala
davidemm
14

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

/* ping */

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

yossis
источник
3

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

Дипан Прабху Бабу
источник