java - DBCP - 不同数据库的验证查询

标签 java connection-pooling apache-commons-dbcp

我使用 DBCP 池,我想使用 testOnBorrowtestOnReturn 来测试连接是否仍然有效。
不幸的是,我必须设置属性 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/

相关文章:

java - 为什么我的 Bit String to Hex String 代码没有打印出结果?

java - 如何减少每个类中的 Logger.getLogger(...) 样板

java - 使用连接池时,我应该在每次查询时获取连接还是每批获取一次连接?

java - 使用 DBCP 配置 Tomcat

mysql - 如何修复: "No suitable driver found for jdbc:mysql://localhost/dbname" error when using pools?

java - 如何为 Paint.setTextSize() 设置单位

java - 访问多维 ArrayList 值

java - coSTLy 如何在连接池中打开和关闭数据库连接?

java - 线程池连接 vs 单例设计模式获取单个数据库连接

database-connection - 使用 Apache DBCP 进行连接池