java - 在数据库服务器端终止 session 是否也会关闭连接并使 jdbc 连接对象为空?

标签 java database jdbc connection connection-pooling

假设有一个 jdbc 代码运行一些 CRUD 操作。现在,在一个特定的场景中,碰巧有一个行锁,并且该 session 会阻塞其他数据库 session 。

在这种情况下,如果阻塞 session 在数据库端被终止,相应的 java Connection 对象会发生什么情况?给出异常后该对象会变为 null 吗?如果稍后在代码中使用该连接对象而不进行检查,会出现什么行为?

我知道作为最佳实践,我们应该从池中获取连接并在完成后将其关闭,但是有很多以其他方式编写的遗留代码需要一些时间来清理。

如果上述连接是通过数据源创建的,管理连接池,而不是通过普通的 jdbc 连接,那么答案是什么?

最佳答案

任何正在进行的操作都将抛出 SQLException 并且对 Connection.isClosed() 方法的任何调用都将返回 true。任何后续使用连接对象的尝试也将抛出 SQLException 并显示连接已关闭的错误。

这不会将您的连接对象设置为空。如果抛出异常或 Connection.isClosed() 返回 true,则除非您编写显式代码将对象设置为 null,否则什么也做不了。您将不得不手动执行此操作。

关于java - 在数据库服务器端终止 session 是否也会关闭连接并使 jdbc 连接对象为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206536/

相关文章:

java - 如何使用java 10在maven中添加javafx依赖项

java - 需要具有 FBO 扩展的 OpenGL 2.0 或更高版本 - LibGDX 错误

mysql - 使用 JDBC 和 Java EE 应用 MVC 设计模式连接到 MySQL

java - 连接到 oracle 时出错。获取方法 t2cGetCharSet 的 UnsatisfiedLinkError

java - 普通 Java 持久性和 JavaFX 表示层 : approach for class design?

c# - 级联和链接有什么区别

Javafx:从 TableCell 获取属性

php - 窗口上的 voltDB

mysql - 如何在 SQL NOT IN 的 where 子句中添加另一个条件?

Mysql join 4个表可以在一个查询中完成吗