【问题标题】:jdbc validation queryjdbc验证查询
【发布时间】:2011-06-26 02:27:17
【问题描述】:

是否有一个库可以为 jdbc 驱动程序类确定要使用的适当验证查询?

例如 如果 jdbc 驱动程序是 com.mysql.jdbc.Driver 或 com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 库将知道验证查询是“SELECT 1”

c3po http://www.mchange.com/projects/c3p0/index.html#preferredTestQuery

dbcp http://commons.apache.org/dbcp/configuration.html “验证查询”

【问题讨论】:

  • “验证查询”是什么意思?你的意思是检查连接是否存在?
  • 大多数连接池要求最终用户设置验证查询以用于测试连接。 sql 测试查询不可移植。 # MySQL/PostgreSQL/MS SQL 使用:SELECT 1 # Oracle 使用:SELECT 1 from dual # DB2 使用:SELECT 1 FROM sysibm.sysdummy1 最终用户担心这些事情的原因是什么?为什么每个程序员都应该做同样的事情?因此图书馆的建议
  • c3po 有一个不错的概念——自动测试表。这个想法可以扩展,因为场景可能不允许 jdbc 用户创建表。因此,当我们使用 liquibase 时,每个模式都有 databasechangelog。然后我们可以使用 SELECT * from databasechangelog。
  • 这个答案也可以帮助你:stackoverflow.com/questions/10684244/… 这是一个简单的类,它根据 jdbc 驱动程序类确定验证查询。 Blog - validationQuery for various Databases

标签: java validation jdbc


【解决方案1】:

我认为图书馆不适合这种事情。

如果您使用的是连接池,您更有可能要求它在分发连接之前检查连接。您只需输入适当的 SQL 并让池处理它。库将是后退一步,因为它表明您的代码会调用它。

【讨论】:

  • 我认为这是后退一步,因为您谈论的是整个库,另一个依赖项,因为它的核心非常简单。写“SELECT 1”然后继续。
  • 显然他们不同意你的观点,因为你引用的池化解决方案都没有这样的东西。似乎没有其他人认为这是一件大事。祝他们在十字军东征中好运。其他人也懒得回答。这说明了什么?
【解决方案2】:

JDBC type 4 提供了一个 isValid 方法

【讨论】:

  • 我认为实际上从 JDBC 3 开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2020-04-07
  • 1970-01-01
  • 2016-06-30
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多