web-dev-qa-db-fra.com

DBCP - validationQuery pour différentes bases de données

J'utilise le pool DBCP et je veux utiliser testOnBorrow et testOnReturn pour tester si la connexion est toujours valide.
Malheureusement, je dois définir la propriété validationQuery pour que cela fonctionne.

Question: Quelle valeur doit être dans validationQuery?

Je sais que: validationQuery doit être une instruction SQL SELECT qui renvoie au moins une ligne.

Le problème est que nous utilisons différentes bases de données (DB2, Oracle, hsqldb).

75
bugs_

Il n'y a pas qu'une seule validationQuery pour toutes les bases de données. Sur chaque base de données, vous devez utiliser une validationQuery différente.

Après quelques heures de recherches sur Google et d’essais, j’ai rassemblé ce tableau:

Notes de validation de la base de données

  • 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 (testé sur 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

J'ai écrit à ce sujet sur mon blog - requête de validation pour diverses bases de données .

Il existe à l’avance un exemple de classe qui renvoie validationQuery en fonction du pilote JDBC.

Ou est-ce que quelqu'un a une meilleure solution?

184
bugs_

Pour MySQL avec le pilote Connector/J, une requête de validation légère envoie simplement un ping au serveur et renvoie un jeu de résultats factice. La requête de validation peut être (ou doit commencer par) exactement la chaîne suivante:

/* ping */

Pour plus d’informations, reportez-vous au Validation des connexions dans le manuel du pilote MySQL

12
yossis

Pour Informix, la requête de validation est, sélectionnez 1 dans systables.

1
Deepan Prabhu Babu