我使用 DBCP 池,我想使用 testOnBorrow 和 testOnReturn 来测试连接是否仍然有效。
不幸的是,我必须设置属性 validationQuery 才能使其工作。
问题:validationQuery 应该是什么值?
我知道,validationQuery 必须是一个 SQL SELECT 语句,它至少返回一行。
问题是我们使用各种数据库(DB2、Oracle、hsqldb)。
最佳答案
并非所有数据库都只有一个validationQuery。在每个数据库上,您必须使用不同的验证查询。
经过几个小时的谷歌搜索和测试,我收集了这张表:
数据库验证查询注释
- hsqldb -
从 INFORMATION_SCHEMA.SYSTEM_USERS 中选择 1
- Oracle -
select 1 from dual
- DB2 -
从 sysibm.sysdummy1 中选择 1
- mysql -
/* ping */select 1
- microsoft SQL Server -
select 1
(在 SQL-Server 9.0、10.5 [2008] 上测试) - postgresql -
选择 1
- ingres -
选择 1
- Derby -
值 1
- H2 -
选择1
- Firebird -
从 rdb$database 中选择 1
- MariaDb -
选择 1
- Informix -
从系统表中选择 1
- Hive -
选择 1
- Impala -
选择 1
我在我的博客上写过 - validation query for various databases .
前面有个类的例子,根据JDBC驱动返回validationQuery。
或者有人有更好的解决方案吗?
关于java - DBCP - 不同数据库的验证查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684244/