Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道jdbc连接失效的原因_Java_Jdbc - Fatal编程技术网

Java 如何知道jdbc连接失效的原因

Java 如何知道jdbc连接失效的原因,java,jdbc,Java,Jdbc,我想知道朋友们,当一个jdbc连接变得无效时,它可能是故意关闭的,或者某个事务使它无效并关闭了它,是否有办法知道到底是什么使连接无效,在连接上是否有我可以获得和检查的痕迹 我面临的情况是,我必须检测到一台服务器已脱机,我是如何做到这一点的;任何试图从连接池借用连接的操作,请检查该连接是否有效。如果不是,并且如果无效的原因是无法连接到数据库,则触发propertychange并通知任何订阅者该更改,订阅者将弹出一个对话框来阻止所有操作,并每5秒开始查询数据库以检查是否返回。希望我把我的情况讲清楚您

我想知道朋友们,当一个jdbc连接变得无效时,它可能是故意关闭的,或者某个事务使它无效并关闭了它,是否有办法知道到底是什么使连接无效,在连接上是否有我可以获得和检查的痕迹


我面临的情况是,我必须检测到一台服务器已脱机,我是如何做到这一点的;任何试图从连接池借用连接的操作,请检查该连接是否有效。如果不是,并且如果无效的原因是无法连接到数据库,则触发propertychange并通知任何订阅者该更改,订阅者将弹出一个对话框来阻止所有操作,并每5秒开始查询数据库以检查是否返回。希望我把我的情况讲清楚

您可以使用连接池库来代表您验证连接。在数据库操作期间,它将自动测试连接运行状况,如果现有连接无效,则创建新连接

对于C3P0连接池库,请检查以下文档:


通常,当您尝试使用过时的连接时,例如通过发出@PeterLawrey建议的简单SQL语句,将抛出一个SQLException,其中包含错误的详细信息(如果驱动程序可以使用)。捕获异常并分析其
getErrorCode()
getSQLState()
方法返回的内容。请记住,虽然SQLSTATE值是标准化的,但它们不是非常精细的,虽然供应商错误代码可能提供更多信息,但在连接到不同的数据库平台时会有所不同。

您可以尝试
选择1=1
并查看是否有任何结果。您应该检查相应的API。您可以尝试Peter建议的方法,但很难检测DB服务器停机的原因,因为这可能是一个错误网络问题或可能是数据库故障不能说我不想知道服务器为什么停机,更确切地说,为什么连接关闭,它是否因为事务错误而无效?或者它是无效的,因为它无法访问数据库。谢谢peter good建议我2美分,检查连接超时,并检查开发时是否有人在调试模式下工作