我有时会得到以下异常:
com.ibm.db2.jcc.b.gm: [jcc] [t4] [2030] [11211] [3.50.152]在对连接的底层套接字,套接字输入流或套接字输出流进行操作期间发生通信错误.错误位置:Reply.fill().消息:连接重置.ERRORCODE = -4499,SQLSTATE = 08001
问题是,代码成功执行了一段时间,然后突然我得到了这个异常.但是,当我再次运行代码时,它会正常运行.
有人可以告诉我可能出现的问题,并提供一些解决方法.
这是未正确关闭/释放 JDBC 资源的标志。您需要在尽可能短的范围内获取并关闭所有 JDBC 资源,即您需要在与获取它们完全相同的方法块的块finally中以相反的顺序关闭它们。try例如
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = database.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(SQL);
// ...
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
Run Code Online (Sandbox Code Playgroud)
如果您不尽快正确关闭它们,数据库迟早会将其掌握在自己手中,并且您的应用程序迟早可能会崩溃,就像您自己遇到的那样。
为了提高连接性能,请使用连接池——但您仍然需要以与上面相同的方式获取和关闭它们!现在只是连接池实现,它在幕后担心是否实际关闭连接。
| 归档时间: |
|
| 查看次数: |
21086 次 |
| 最近记录: |