Używam puli DBCP i chcę użyć testOnBorrow i testOnReturn, aby sprawdzić, czy połączenie jest nadal prawidłowe.
Niestety muszę ustawić właściwość validationQuery, aby to działało.
Pytanie: Jaka powinna być wartość w validationQuery?
Wiem, że: validationQuery musi być instrukcją SQL SELECT, która zwraca przynajmniej jeden wiersz.
Problem w tym, że korzystamy z różnych baz danych (DB2, Oracle, hsqldb).
Odpowiedzi:
Dla wszystkich baz danych istnieje nie tylko jedno zapytanie walidacyjne. W każdej bazie danych musisz użyć innego zapytania validationQuery.
Po kilku godzinach googlowania i testowania zebrałem tę tabelę:
Walidacja bazy danych Zapytanie notatek
select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
select 1 from dual
select 1 from sysibm.sysdummy1
select 1
select 1
(testowano na SQL-Server 9.0, 10.5 [2008])select 1
select 1
values 1
select 1
select 1 from rdb$database
Pisałem o tym na swoim blogu - zapytanie walidacyjne dla różnych baz danych .
Wcześniej jest przykład klasy, która zwraca validationQuery zgodnie ze sterownikiem JDBC.
A może ktoś ma lepsze rozwiązanie?
źródło
select 1
działa również dla Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20 lutego 2014 20:04:26, Standard Edition (64-bit) w systemie Windows NT 6.1 <X64> (kompilacja 7601: Service Pack 1) (Hypervisor)select 1
dla Hive and ImpalaW przypadku MySQL ze sterownikiem Connector / J istnieje lekkie zapytanie weryfikacyjne, które po prostu wysyła ping do serwera i zwraca fikcyjny zestaw wyników. Zapytanie walidacyjne może być (lub powinno zaczynać się) dokładnie następującym ciągiem:
/* ping */
Aby uzyskać więcej informacji, zapoznaj się z Validating Connections w podręczniku sterownika MySQL
źródło
W przypadku Informix kwerenda sprawdzająca to, wybierz 1 z systables
źródło