该代码是否会影响性能或导致任何内存泄漏?此处PreparedStatement
对象未关闭,并且没有关闭的引用。有什么建议吗?
private ResultSet getEmpData(String query){
ResultSet rs = null;
try {
rs = connection.prepareStatement(query).executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public int getEmployeeSalary(){
ResultSet rs = null;
int salary = 0 ;
try {
rs = getEmpData("SELECT SALARY FROM EMP WHERE NAME ='SAM'");
while (rs.next()) {
salary = rs.getInt(1);
}
} catch (SQLException e) {
}finally{
if (rs!= null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return salary;
}
答案 0 :(得分:0)
从技术上讲,您不应该关闭ResultSet,而应关闭数据库连接本身。如果在完成数据库操作后关闭数据库连接,则不应导致内存泄漏。
答案 1 :(得分:0)
当您关闭ResultSet
时,您并未关闭与其关联的PreparedStatement
语句。您应该在finally
区块中执行以下操作:
rs.getStatement().close();
这将确保关闭相关语句。同样根据Javadoc,
当Statement对象时,ResultSet对象自动关闭 生成它的是关闭,重新执行或用于检索下一个 由多个结果序列产生。
这意味着当您使用上述代码关闭语句对象时,您还可以有效地关闭ResultSet对象。