Connection 接口中的 isClose() 方法和 isValid() 方法有啥区别?

Posted

技术标签:

【中文标题】Connection 接口中的 isClose() 方法和 isValid() 方法有啥区别?【英文标题】:What is the difference between isClose() method and isValid() method in Connection interface?Connection 接口中的 isClose() 方法和 isValid() 方法有什么区别? 【发布时间】:2015-02-17 09:47:54 【问题描述】:

Connection接口中的isClose()方法和isValid()方法有什么区别? http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html

无效连接是什么意思?

这是否意味着连接已打开且无效?

连接无效时会发生什么?

【问题讨论】:

查看***.com/questions/7764671/java-jdbc-connection-status 【参考方案1】:

Javadoc 很清楚。

isClose() 只有在调用Connection.close() 关闭连接时才能保证返回true。如果连接由于某些错误而关闭,isClose() 不一定会返回 true。因此,如果返回true,则可以确定连接已关闭,但如果返回false,则无法确定。

isValid()isClose() 相反。它尝试通过运行数据库查询来肯定地检查连接是否仍然打开。如果它返回true,你肯定知道连接是打开的。如果它返回 false,您无法确定它是否打开(因为查询可能由于某些网络问题而延迟,这会阻止它在给定的超时之前完成)。

【讨论】:

那么有效手段是开放的吗?有没有其他方法可以确定连接是否有效(或打开)??? @Charychap 是的,如果isValid()返回true,表示开启,但即使isValid()返回false,也可能仍然开启。 感谢您的回答。有没有其他方法可以确定连接是否有效(或打开)??? @Charychap 您可以随时尝试运行数据库查询或更新,如果有效,则连接必须打开且有效。【参考方案2】:

isClosed() :- 如果我们在连接上调用 close() 或在连接上发生任何致命错误,则返回 true。所以你必须为你的代码创建新的连接。

isValid(int timeout) :- 在这种情况下,首先它检查是否关闭,如果它没有关闭,然后驱动程序提交一个关于连接的查询以测试它是否工作。如果有效则返回 true 或 false。

【讨论】:

以上是关于Connection 接口中的 isClose() 方法和 isValid() 方法有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Android 10. 判定Socket 是不是连接网络

JDBC中使用的java中**Connection接口**的**prepareStatement**的实现在哪里?

外网访问接口,报net::ERR_CONNECTION_REST错误。

关闭open页面时刷新父页面列表

java.util包详解——Connection接口

集合之Connection接口