2012-05-21 15 views
67

utilizo piscina DBCP y quiero utilizar testOnBorrow y testOnReturn para probar si la conexión es aún válida.
Lamentablemente tengo que establecer la propiedad validationQuery para que funcione.DBCP - validationQuery para diferentes bases de datos

Pregunta: ¿Qué valor debe tener en la validaciónQuery?

Sé que: validationQuery debe ser una instrucción SQL SELECT, que devuelve al menos una fila.

El problema es que utilizamos varias bases de datos (DB2, Oracle, hsqldb).

+0

¿El uso de validationQuery no degrada el rendimiento? Esta consulta se ejecuta para cada conexión que la aplicación hace bien? – yaswanth

Respuesta

162

No hay una sola consulta de validación para todas las bases de datos. En cada base de datos, debe usar validationQuery diferente.

Después de unas horas de googlear y las pruebas que he recogido esta tabla:

base de datos validationQuery señala

  • 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 (probado en 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

Escribí sobre ello en mi blog - validation query for various databases.

De antemano hay un ejemplo de clase, que devuelve validationQuery según el controlador JDBC.

¿O alguien tiene una mejor solución?

+2

+1, también 'Seleccione 1' funciona en MySQL (editó su respuesta) –

+4

select 1 también es válido en postgresql –

+0

' select 1' también funciona para Microsoft SQL Server 2014 - 12.0.2000.8 (X64), 20 de febrero de 2014 20: 04:26, Standard Edition (64 bits) en Windows NT 6.1 (Build 7601: Service Pack 1) (hipervisor) – Yuci

9

Para MySQL con el controlador Connector/J, hay una consulta de validación liviana que simplemente envía un ping al servidor y devuelve un conjunto de resultados ficticio. La consulta de validación puede ser (o debe comenzar con) exactamente de la siguiente cadena:

/* ping */ 

Para más infor refieren a la Validating Connections en el manual del controlador de MySQL

+0

También funciona para Microsoft SQL Server 2008 – Hannes

0

Para Informix, la consulta de validación es, seleccione 1 de systables

Cuestiones relacionadas