2012-05-21 5 views
67

utiliser POOL DBCP et je veux utiliser testOnBorrow et testOnReturn pour vérifier si la connexion est toujours valide.
Malheureusement, je dois définir la propriété validationQuery pour que cela fonctionne.DBCP - validationQuery pour différentes bases de données

Quelle devrait être la valeur dans validationQuery?

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

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

+0

L'utilisation de validationQuery ne dégrade pas les performances? Cette requête s'exécute pour chaque connexion que l'application obtient correctement? – yaswanth

Répondre

162

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 googler et les tests que j'ai recueilli ce tableau:

Database validationQuery note

  • 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

je l'ai écrit à ce sujet sur mon blog - validation query for various databases.

A l'avance, il existe un exemple de classe, qui renvoie validationQuery en fonction du pilote JDBC.

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

+2

+1, également 'Select 1' fonctionne sur MySQL (édité votre réponse) –

+4

select 1 est également valide sur postgresql –

+0

' select 1' fonctionne également pour Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20 février 2014 20: 04:26, Standard Edition (64 bits) sous Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor) – Yuci

9

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

/* ping */ 

Pour plus d'infor se réfèrent au Validating Connections dans le manuel du pilote MySQL

+0

Fonctionne également pour Microsoft SQL Server 2008 – Hannes

0

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

Questions connexes