【发布时间】:2011-12-10 12:00:19
【问题描述】:
我正在使用的数据库驱动程序(对于 sybase 数据库)没有实现 Connection.isValid()。在 Java 中使用查询(或其他方式)验证数据库连接的最有效方法是什么?
【问题讨论】:
我正在使用的数据库驱动程序(对于 sybase 数据库)没有实现 Connection.isValid()。在 Java 中使用查询(或其他方式)验证数据库连接的最有效方法是什么?
【问题讨论】:
C3P0 和 DBCP 等库允许您提供验证查询,该查询通常非常简单,例如“选择 1”。因此,您可以采用相同的方法或简单地使用这些库中的任何一个(我的建议是 C3P0)。
但是,与其在执行查询之前测试连接,您可以简单地尝试执行,然后在由于连接无效而失败时重试该操作。或者,您可以考虑一种非池连接方法,其中每次都即时创建连接(例如 Spring 的DriverManagerDataSource)。
【讨论】:
我非常同意 Adamski 关于使用“从表中选择 1”作为检查连接性和使用连接池(例如 commons-dbcp、C3PO)的有效方法的评论。
应用程序服务器(例如 Websphere)允许您为您配置此验证,因此您的应用程序代码不必知道它。您可以选择在使用之前始终检查连接,或者在创建新连接时验证连接池。您还可以定期清除连接,以防它们过时。
如果您没有在应用程序服务器中运行,则可以使用具有此处描述的属性的 Common DBCP:
http://commons.apache.org/dbcp/configuration.html
或 C3PO 并查看使用 idleConnectionTestPeriod 属性。此链接讨论了与 Hibernate 的使用,但它通常仍与 C3PO 相关
http://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool
【讨论】: