一个方法:
public ResultSet getResultSet(){
ResultSet rs = null;
.......(查询后,把记录集存入rs)
return rs;
}这个方法会不会导致记录集未关闭的错误??
连续循环用此方法,会不会使数据库游标耗尽??
是不是要在程序中避免这种返回记录集的方法??
public ResultSet getResultSet(){
ResultSet rs = null;
.......(查询后,把记录集存入rs)
return rs;
}这个方法会不会导致记录集未关闭的错误??
连续循环用此方法,会不会使数据库游标耗尽??
是不是要在程序中避免这种返回记录集的方法??
但是及时关闭能够有效的利用内存空间。
list.add(anObject(rs.getXXX(1), rs.getXXX(2)....));
}finally{
try{
if(rs != null)
rs.close();
if(ps != null)
ps.close();
}catch(.....)
}
所以必须立即读取全部记录, 然后存到List中, 迅速释放连接.
若conn不关则资源浪费
建议用最新的jdbc中的catched rowset或者封装到set、list
不会!
连续循环用此方法,会不会使数据库游标耗尽??
会!
是不是要在程序中避免这种返回记录集的方法??
是!可以定义一个全局变量ResultSet,而不是在函数体中定义成局部变量,在代码最后关闭ResultSet,这样程序中只有一个ResultSet,不必担心数据库耗尽资源。^_^
//的操作会当掉web服务器.
public class Test {
private PreparedStatement statement = null;
private ResultSet resultSet = null;
private void sqlExecute (String strSql) throws Exception{
try {
statement = conn.prepareStatement(strSql);
resultSet = statement.executeQuery();
} catch (Exception e){
logger.error(e.getMessage());
throw e;
}
}
private void useResult(){
try {
sqlExecute(strBuffer.toString());
if (resultSet.next()) {
//....
}
} finally {
if(resultSet != null) {
resultSet = null
resultSet .close();
}
if(statement != null){
statement = null;
statement .close();
}
}
}
}