Java JDBC:Reply.fill()

7 java db2 jdbc

我有时会得到以下异常:

com.ibm.db2.jcc.b.gm: [jcc] [t4] [2030] [11211] [3.50.152]在对连接的底层套接字,套接字输入流或套接字输出流进行操作期间发生通信错误.错误位置:Reply.fill().消息:连接重置.ERRORCODE = -4499,SQLSTATE = 08001

问题是,代码成功执行了一段时间,然后突然我得到了这个异常.但是,当我再次运行代码时,它会正常运行.

有人可以告诉我可能出现的问题,并提供一些解决方法.

Bal*_*usC 5

这是未正确关闭/释放 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)

如果您不尽快正确关闭它们,数据库迟早会将其掌握在自己手中,并且您的应用程序迟早可能会崩溃,就像您自己遇到的那样。

为了提高连接性能,请使用连接池——但您仍然需要以与上面相同的方式获取和关闭它们!现在只是连接池实现,它在幕后担心是否实际关闭连接。


Joh*_*ane 0

您的连接似乎超时了。但我并不是真正的问题所在。它可能与您的数据库服务器的连接有关。很抱歉我无法为您提供更多帮助,但希望这对您有所帮助。