【问题标题】:DBCP - validationQuery for different DatabasesDBCP - 不同数据库的验证查询
【发布时间】:2012-05-27 21:27:32
【问题描述】:

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

问题:validationQuery 应该是什么值?

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

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

【问题讨论】:

  • 使用validationQuery不会降低性能吗?此查询针对应用程序正确连接的每个连接运行?
  • @yaswanth 我想它通常只在启动时运行一次,除非你有一些特殊情况

标签: java connection-pooling apache-commons-dbcp


【解决方案1】:

并非所有数据库都只有一个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
  • MariaDb - select 1
  • Informix - select 1 from systables
  • 蜂巢 - select 1
  • 黑斑羚 - select 1

我在我的博客上写过 - validation query for various databases

前面有个类的例子,根据JDBC驱动返回validationQuery。

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

【讨论】:

  • select 1 在 postgresql 上也有效
  • select 1 也适用于 Microsoft SQL Server 2014 - 12.0.2000.8 (X64),2014 年 2 月 20 日 20:04:26,Windows NT 6.1 上的标准版(64 位)(内部版本 7601:Service Pack 1)(管理程序)
  • select 1 用于 Hive 和 Impala
【解决方案2】:

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

/* ping */

更多信息请参考 MySQL 驱动手册中的Validating Connections

【讨论】:

    【解决方案3】:

    对于 Informix,验证查询是, 从系统表中选择 1

    【讨论】:

    • 谢谢 - 我刚刚将它添加到列表中
    【解决方案4】:

    对于 MairaDB 验证查询是“选择 1”。

    【讨论】:

    • 谢谢 - 我刚刚将它添加到列表中
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多