DBCP - validationQuery für verschiedene Datenbanken

82

Ich verwende den DBCP-Pool und möchte mit testOnBorrow und testOnReturn testen, ob die Verbindung noch gültig ist.
Leider muss ich die Eigenschaft validationQuery festlegen, damit es funktioniert.

Frage: Welcher Wert sollte in validationQuery sein?

Ich weiß, dass: validationQuery eine SQL SELECT-Anweisung sein muss, die mindestens eine Zeile zurückgibt.

Problem ist, dass wir verschiedene Datenbanken verwenden (DB2, Oracle, hsqldb).

bugs_
quelle
Beeinträchtigt die Verwendung von validationQuery nicht die Leistung? Diese Abfrage wird für jede Verbindung ausgeführt, die die Anwendung erhält, oder?
Yaswanth

Antworten:

205

Es gibt nicht nur eine Validierungsabfrage für alle Datenbanken. Für jede Datenbank müssen Sie eine andere Validierungsabfrage verwenden.

Nach ein paar Stunden googeln und testen habe ich diese Tabelle gesammelt:

DatenbankvalidierungQuery-Notizen

  • 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(getestet auf SQL-Server 9.0, 10.5 [2008])
  • postgresql -select 1
  • ingres -select 1
  • Derby -values 1
  • H2 -select 1
  • Feuervogel -select 1 from rdb$database

Ich habe darüber in meinem Blog geschrieben - Validierungsabfrage für verschiedene Datenbanken .

Im Voraus gibt es ein Beispiel für eine Klasse, die validationQuery gemäß JDBC-Treiber zurückgibt.

Oder hat jemand eine bessere Lösung?

bugs_
quelle
4
select 1 ist auch gültig für postgresql
Danubian Sailor
select 1funktioniert auch für Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20. Februar 2014, 20:04:26 Uhr, Standard Edition (64-Bit) unter Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Yuci
select 1für Hive und Impala
Davidemm
14

Für MySQL mit dem Connector / J-Treiber gibt es eine einfache Validierungsabfrage, die nur einen Ping an den Server sendet und eine Dummy-Ergebnismenge zurückgibt. Die Validierungsabfrage kann genau die folgende Zeichenfolge sein (oder sollte damit beginnen):

/* ping */

Weitere Informationen finden Sie unter Überprüfen von Verbindungen im MySQL- Treiberhandbuch

Yossis
quelle
3

Für Informix lautet die Validierungsabfrage 1 aus systables

Deepan Prabhu Babu
quelle