DBCP - 针对不同数据库的validationQuery

时间:2012-05-21 11:20:54

标签: java connection-pooling apache-commons-dbcp

我使用DBCP池,我想使用 testOnBorrow testOnReturn 来测试连接是否仍然有效。
不幸的是,我必须设置属性validationQuery以使其工作。

问题: validationQuery应该有什么价值?

我知道:validationQuery必须是一个SQL SELECT语句,至少返回一行。

问题是我们使用各种数据库(DB2,Oracle,hsqldb)。

4 个答案:

答案 0 :(得分:182)

所有数据库不仅有一个validationQuery。在每个数据库上,您必须使用不同的validationQuery。

经过几个小时的谷歌搜索和测试后,我收集了这张表:

数据库验证查询说明

  • 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(在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

我在博客上写了这篇文章 - validation query for various databases

事先有一个类的例子,它根据JDBC驱动程序返回validationQuery。

或者有没有人有更好的解决方案?

答案 1 :(得分:11)

对于带有Connector / J驱动程序的MySQL,有一个轻量级验证查询,只是向服务器发送ping并返回一个虚拟结果集。 验证查询可以(或应该以)开头,完全是以下字符串:

/* ping */

有关更多信息,请参阅MySQL驱动程序手册中的Validating Connections

答案 2 :(得分:1)

对于Informix,验证查询是, 从systables中选择1

答案 3 :(得分:1)

对于 MairaDB 验证查询是“选择 1”。