我有一个连接到MySQL并在ResultSet
中获取数据的服务方法,在finally
中关闭了PreparedStatement
,但是STS在return语句上显示警告为
潜在的资源泄漏:此处可能无法关闭“ resultSet” 位置
方法:
public boolean checkData() {
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
boolean status = false;
try {
dbConnection = icrud.getConnection();
preparedStatement = dbConnection.prepareStatement("query on table");
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
status = resultSet.getBoolean("STATUS");
}
return status; //Potential resource leak warning shows here.
} catch (Exception e) {
LOGGER.error("Exception Occurred:: " , e);
} finally {
try {
if (preparedStatement != null) {
preparedStatement.close();
preparedStatement = null;
}
} catch (SQLException e) {
LOGGER.error("Exception Occured while Closing statement" , e);
}
try {
if (dbConnection != null) {
dbConnection.close();
dbConnection = null;
}
} catch (SQLException e) {
LOGGER.error("Exception Occured while closing connection" , e);
}
}
return status;
}
根据文档
关闭Statement对象时,如果当前的ResultSet对象,则为 一个存在,也关闭了。
因此,尽管显示警告,我还是最终关闭了Statement
。我已经通过关闭结果集进行检查,最后仍然没有警告。
是假阳性吗?还是我做错了什么?
答案 0 :(得分:-2)
您正在返回“状态”而不关闭连接。进入return语句时,“ finally”子句不会执行。