我使用DBCP池,我想使用 testOnBorrow 和 testOnReturn 来测试连接是否仍然有效。
不幸的是,我必须设置属性validationQuery以使其工作。
问题: validationQuery应该有什么价值?
我知道:validationQuery必须是一个SQL SELECT语句,至少返回一行。
问题是我们使用各种数据库(DB2,Oracle,hsqldb)。
答案 0 :(得分:182)
所有数据库不仅有一个validationQuery。在每个数据库上,您必须使用不同的validationQuery。
经过几个小时的谷歌搜索和测试后,我收集了这张表:
数据库验证查询说明
select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
select 1 from dual
select 1 from sysibm.sysdummy1
select 1
select 1
(在SQL-Server 9.0上测试,10.5 [2008])select 1
select 1
values 1
select 1
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”。