前几天写一个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不能关闭
