86 votes

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

J'utilise le pool DBCP et je veux utiliser testOnBorrow y 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).

0 votes

L'utilisation de validationQuery ne dégrade-t-elle pas les performances ? Cette requête est exécutée pour chaque connexion de l'application, n'est-ce pas ?

219voto

bugs_ Points 1407

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

Après quelques heures de recherche sur Internet et de tests, j'ai rassemblé ce tableau :

Validation de la base de donnéesNotes de requête

  • 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
  • Oiseau de feu - select 1 from rdb$database
  • MariaDb - select 1
  • Informix - select 1 from systables
  • Ruche - select 1
  • Impala - select 1

J'en ai parlé sur mon blog - requête de validation pour diverses bases de données .

En avance il y a un exemple de classe, qui retourne validationQuery selon le pilote JDBC.

Ou quelqu'un a-t-il une meilleure solution ?

6 votes

Select 1 est également valable sur postgresql

1 votes

select 1 fonctionne également pour Microsoft SQL Server 2014 - 12.0.2000.8 (X64), Feb 20 2014 20:04:26, Standard Edition (64-bit) sur Windows NT 6.1 <X64> (Build 7601 : Service Pack 1) (Hyperviseur)

1 votes

select 1 pour Hive et Impala

15voto

yossis Points 428

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

/* ping */

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

4voto

Deepan Points 54

Pour Informix, la requête de validation est, select 1 from systables

1voto

Amit P Points 335

Pour MairaDB la requête de validation est "select 1" .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X