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