DBCP - validationQuery для разных баз данных
Я использую пул DBCP, и я хочу использовать testOnBorrow и testOnReturn для проверки работоспособности соединения.
К сожалению, я должен установить свойство validationQuery, чтобы он работал.
Вопрос: Какое значение должно быть в validationQuery?
Я знаю, что: validationQuery должен быть оператором SQL SELECT, который возвращает хотя бы одну строку.
Проблема заключается в том, что мы используем различные базы данных (DB2, Oracle, hsqldb).
Ответы
Ответ 1
Существует не только один 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
- ingres -
select 1
- дерби -
values 1
- H2 -
select 1
- Firebird -
select 1 from rdb$database
Я написал об этом в своем блоге запрос проверки для различных баз данных.
Заблаговременно есть пример класса, который возвращает validationQuery в соответствии с драйвером JDBC.
Или у кого-нибудь есть лучшее решение?
Ответ 2
Для MySQL с драйвером Connector/J существует легкий запрос проверки, который просто отправляет пинг на сервер и возвращает фиктивный результирующий набор. Запрос проверки может быть (или должен начинаться с) точно следующей строкой:
/* ping */
Дополнительные сведения см. В разделе " Подтверждение подключений" в руководстве по эксплуатации MySQL.
Ответ 3
Для Informix, запрос проверки,
выберите 1 из systables