前几天写一个EasyUi的项目 遇到了一个Operation not allowed after ResultSet closed的错 翻译出来是:关闭ResultSet后不允许操作
而我的dao里面是写了俩个方法 一个为外部调用 一个是内部调用 在dao里面用外部方法调内部的方法 这样在我要使用的时候就调一次也可以得到效果
我的dao里面的代码是:
private Connection con=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
/**
* 外部方法
*/
@Override
public List<TreeEntity> findTreeParent() {
List<TreeEntity> lt=new ArrayList<>();
try {
con=getConnection();
StringBuffer sb=new StringBuffer();
sb.append("SELECT * FROM t_bookmenu WHERE pid IS NULL ORDER BY bynumber");
ps=con.prepareStatement(sb.toString());
System.out.println(sb);
rs=ps.executeQuery();
while(rs.next()) {
TreeEntity t=new TreeEntity();
t.setId(rs.getString("mid"));
t.setText(rs.getString("mname"));
t.setChecked(false);
//调子节点
t.setChildren(findTreeChildren(rs.getString("mid")));
lt.add(t);
}
return lt;
} catch (Exception e) {
e.printStackTrace();
}finally {
close(con, ps, rs);
}
return null;
}
/**
* 内部方法
*/
@Override
public Set<TreeEntity> findTreeChildren(String mid) {
Set<TreeEntity> st=new HashSet<>();
try {
StringBuffer sb=new StringBuffer();
sb.append(" SELECT mname,MID,pid,murl,byNumber FROM v_findBookMenuAll ");
sb.append(" WHERE pid='"+mid+"'");
con=getConnection();
ps=con.prepareStatement(sb.toString());
System.out.println(sb);
rs=ps.executeQuery();
while(rs.next()) {
TreeEntity t=new TreeEntity();
t.setId(rs.getString("mid"));
t.setText(rs.getString("mname"));
t.setChecked(false);
st.add(t);
}
return st;
} catch (Exception e) {
e.printStackTrace();
}finally {
close(con, ps, rs);
}
return null;
}
结果在调用的时候就出现了Operation not allowed after ResultSet closed这个错误
原来是在res使用完毕之前,不能关闭conn。
因为是循环 将
findTreeChildren()方法的close去掉 因为操作还没执行完res不能关闭