86

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

问题:validationQuery 应该是什么值?

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

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

4

4 回答 4

219

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

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

数据库验证查询说明

  • hsqldb -select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
  • 甲骨文——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
  • 入口——select 1
  • 德比-values 1
  • H2 -select 1
  • 火鸟-select 1 from rdb$database
  • 玛丽亚数据库-select 1
  • Informix -select 1 from systables
  • 蜂巢-select 1
  • 黑斑羚-select 1

我在我的博客上写了关于它的各种数据库的验证查询

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

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

于 2012-05-21T11:21:40.963 回答
15

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

/* ping */

有关更多信息,请参阅MySQL 驱动程序手册中的验证连接

于 2013-12-26T09:10:47.427 回答
4

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

于 2015-06-26T22:06:59.473 回答
1

对于 MairaDB 验证查询是 "select 1" 。

于 2021-03-08T09:53:39.317 回答