下面的一个方法是删除一个目录树参数指定该目录的id及是否是叶子节点(0为叶子节点返回true)
具体实现是有递归先删除该节点的叶子节点,最后删除本身(执行的delete语句)。
我的问题是:删除叶子节点(子目录)并没有调用delete语句怎么就删除了呢??
- Java code
public static void categoryDelete(int id, boolean isLeaf) { Connection conn = null ; Statement stmt = null ; ResultSet rs = null ; String sql_child = "select * from category where pid = " + id; conn = DB.getConn(); stmt = DB.getStmt(conn); rs = DB.executeQuery(stmt, sql_child); if(!isLeaf){ try { while (rs.next()) { categoryDelete(rs.getInt("id"), rs.getInt("leaf")==0); } } catch (SQLException e) { e.printStackTrace(); }finally{ DB.closeRs(rs); DB.closeStmt(stmt); } } //删除该目录 String sql_self = "delete from category where id = "+ id ; DB.executeUpdate(conn, sql_self); }
------解决方案--------------------
递归的方法只要一步一步走下去就清楚了,能调试的话单步执行一下吧,不要仅凭主观
------解决方案--------------------
删除的语句写在递归的方法里面,一层层找下去,当找到叶子节点的时候就自动执行删除的语句了。
------解决方案--------------------
//主要是这里 id
String sql_self = "delete from category where id = "+ id ;
因为这里的ID是是递归传过来的ID 直接就删除了。
------解决方案--------------------
------解决方案--------------------
一步一步走下去,一层层找下去,
String sql_self = "delete from category where id = "+ id ;
------解决方案--------------------
因为你最后删除了节点了。