DBCP-针对不同数据库的validationQuery


83

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

问题:validationQuery应该有什么值?

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

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


使用validationQuery不会降低性能吗?该查询针对应用程序正确连接的每个连接运行?
2015年

Answers:


206

对于所有数据库,不仅只有一个validationQuery。在每个数据库上,您必须使用不同的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

我在有关各种数据库的博客验证查询中写了有关它的内容。

预先有一个类的示例,该类根据JDBC驱动程序返回validationQuery。

还是有人有更好的解决方案?


4
select 1在postgresql上也有效
Danubian Sailor

select 1也适用于Windows NT 6.1 <X64>(内部版本7601:Service Pack 1)(系统管理程序)上的Microsoft SQL Server 2014-12.0.2000.8(X64),2014年2月20日20:04:26,标准版(64位)
榆次

select 1为Hive和Impala
davidemm '18

14

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

/* ping */

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.