DBCP - 针对不同数据库的validationQuery

bug*_*gs_ 78 java connection-pooling apache-commons-dbcp

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

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

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

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

bug*_*gs_ 191

所有数据库不仅有一个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
  • ingres -select 1
  • 德比 -values 1
  • H2 -select 1
  • 火鸟 -select 1 from rdb$database

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

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

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

  • select 1在postgresql上也有效 (4认同)
  • +1,也是"选择1"适用于MySQL(编辑你的答案) (2认同)

yos*_*sis 13

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

/* ping */
Run Code Online (Sandbox Code Playgroud)

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