DBCP - validationQuery dla różnych baz danych

84

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).

błędy_
źródło
Czy użycie validationQuery nie obniża wydajności? To zapytanie jest uruchamiane dla każdego połączenia, które aplikacja uzyska, prawda?
yaswanth

Odpowiedzi:

207

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

  • hsqldb -select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
  • Wyrocznia -select 1 from dual
  • DB2 -select 1 from sysibm.sysdummy1
  • mysql -select 1
  • Microsoft SQL Server - select 1(testowano na SQL-Server 9.0, 10.5 [2008])
  • postgresql -select 1
  • ingres -select 1
  • derby -values 1
  • H2 -select 1
  • Firebird -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?

błędów_
źródło
4
select 1 jest również ważny na postgresql
Danubian Sailor
select 1dział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)
Yuci,
select 1dla Hive and Impala
davidemm
14

W 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

yossis
źródło
3

W przypadku Informix kwerenda sprawdzająca to, wybierz 1 z systables

Deepan Prabhu Babu
źródło