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


83

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

Питання: Яке значення має бути у validationQuery?

Я знаю, що: validationQuery має бути оператором SQL SELECT, який повертає принаймні один рядок.

Проблема в тому, що ми використовуємо різні бази даних (DB2, Oracle, hsqldb).


Чи використання validationQuery не погіршує продуктивність? Цей запит виконується для кожного підключення, яке додаток отримує правильно?
Ясвант,

Відповіді:


206

Для всіх баз даних існує не тільки один валідаційний запит. У кожній базі даних потрібно використовувати різні 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.

Або хтось має краще рішення?


4
вибір 1 також діє на postgresql
Дунайський моряк

select 1також працює для Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20 лютого 2014 20:04:26, стандартна версія (64-розрядна версія) для Windows NT 6.1 <X64> (збірка 7601: пакет оновлень 1) (Гіпервізор)
Yuci

select 1для
Вулля

14

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

/* ping */

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.