方法可能因为checked exception导致清理流或资源失败
资源库: findbugs
关键字: OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
This method may fail to clean up (close, dispose of) a stream, database object, or other resource requiring an explicit cleanup operation.
In general, if a method opens a stream or other resource, the method should use a try/finally block to ensure that the stream or resource is cleaned up before the method returns.
This bug pattern is essentially the same as the OS_OPEN_STREAM and ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and hopefully better) static analysis technique. See Weimer and Necula, Finding and Preventing Run-Time Error Handling Mistakes, for a description of the analysis technique. .
问题类似于:
The method creates a database resource (such as a database connection or row set), does not assign it to any fields, pass it to other methods, or return it, and does not appear to close the object on all paths out of the method. Failure to close database resources on all paths out of a method may result in poor performance, and could cause the application to have problems communicating with the database.
关键字: ODR_OPEN_DATABASE_RESOURCE
解决办法:
/**
* 关闭数据库资源方法
* @param con
* @param ps
* @param rs
*/
public static void closeResources (Connection con, PreparedStatement ps,ResultSet rs){
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
LOG.error("释放ResultSet出错", e);
} finally {
try {
if (ps != null){
ps.close();
}
} catch (SQLException e) {
LOG.error("释放PreparedStatement出错", e);
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
LOG.error("释放Connection出错", e);
}
}
}
}
}
本文阐述了在关闭数据库资源时的常见错误,并提供了一个确保所有路径下资源正确关闭的方法,防止性能问题和数据库通信故障。
171万+

被折叠的 条评论
为什么被折叠?



