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


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?


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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.