微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java JDBC:Reply.fill()

我有时会得到以下异常:

com.ibm.db2.jcc.b.gm: [jcc][t4][2030][11211][3.50.152] A communication error occurred during operations on the connection’s underlying socket,socket input stream,
or socket output stream. Error location: Reply.fill(). Message: Connection reset. ERRORCODE=-4499,sqlSTATE=08001

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

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

解决方法

这是未正确关闭/释放JDBC资源的标志.您需要在尽可能短的范围内获取关闭所有JDBC资源,即您需要在与获取它们完全相同的方法块的try块的finally块中以相反的顺序关闭它们.例如.
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) {}
}

如果你没有尽快正确关闭它们,数据库迟早会把它拿在手里,你的应用程序可能会在你遇到自己的时候迟早打破.

要提高连接性能,请使用连接池 – 您仍然需要以与上面相同的方式获取关闭它们!它现在只是连接池实现,它在引擎盖下担心实际关闭连接.

原文地址:https://www.jb51.cc/java/128419.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐