遞歸產生node_id=1001635872下的所有子結點﹐條件是isFolder=1的遞歸寫法:
select * from NodesTable where isFolder=1 start with NodeId=1001635872 connect by prior NodeId=parentId.
給我們大家打上高分吧。

解决方案 »

  1.   

    目的是要实现一颗数:
     Tree from DB
          |_Pets
          |  |_Birds(1表示这里是个文件夹)
          |  |   |_Parakeet(0表示这是最后一个节点)
          |  |_Mammals
          |_Farm
          |  |_
          |  |_
          |_不够分可以加!谢谢了。目的想达到查询数据库的次数最少!
      

  2.   

    你考量一下我那個SQL﹐如何﹖
      

  3.   

    huihuang(roger)的sql语法不明白呀?
    在pl/sql和sql查询器都不能实现的.
      

  4.   

    彩旦类
    public class Menu
        implements Serializable {
      private int menuId;
      private String menuName;
      private String menuDiscription;
      private int fatherId;
      private String menuUrl;
      private String isUse;
      private String note;
      private int menuLevel;
      private int menuOrder;
      private String action = "";
      private int priv;
      private int roleId; //控制器
    }
    彩旦树类
    import util.db.DB;
    import sun.jdbc.rowset.CachedRowSet;
    import util.string.StringUtil;
    import java.util.ArrayList;public class MenuTree {
      public ArrayList tree = new ArrayList();
      public ArrayList cach = new ArrayList();
      private DB mydb = new DB();
      /**
       * 取得子菜单数据集(递归调用)
       */
      public void getChildMenu(int fatherId) throws java.sql.
          SQLException {
        CachedRowSet rs = null;
          for (int i=0;i<cach.size();i++){
            Menu menuItems=(Menu)cach.get(i);
            if (menuItems.getFatherId()==fatherId){
              Menu menuItem = new Menu();
              menuItem.setMenuId(menuItems.getMenuId());
              menuItem.setMenuName(menuItems.getMenuName());
              menuItem.setMenuLevel(menuItems.getMenuLevel());
              menuItem.setMenuUrl(menuItems.getMenuUrl());
              menuItem.setFatherId(menuItems.getFatherId());
              tree.add(menuItem);
              getChildMenu(menuItem.getMenuId());
            }
          }  }
      public void initial() {
         CachedRowSet rs = null;
         try {
           String sql = "select * from Menu order by menuOrder";
           //System.out.println(sql);
           rs = mydb.executeQuery(sql);
           while (rs.next()) {
             Menu menuItem = new Menu();
             menuItem.setMenuId(rs.getInt("menuId"));
             menuItem.setMenuName(rs.getString("menuName"));
             menuItem.setMenuLevel(rs.getInt("menuLevel"));
             menuItem.setFatherId(rs.getInt("fatherId"));
             menuItem.setMenuUrl(rs.getString("menuUrl"));
             cach.add(menuItem);
           }
         }
         catch (Exception e) {
           System.out.println("initial:"+e.getMessage());
         }
       }  public void destroy() {
        cach.clear();
      }  public static void main(String args[]) {
        MenuTree mytree = new MenuTree();
        mytree.initial("1");
        try {
          mytree.getUserMenu(0, "1");
        }
        catch (Exception e) {
          System.out.println(e.getMessage());
        }
        for (int i = 0; i < mytree.tree.size(); i++) {
          Menu myMenu = (Menu) mytree.tree.get(i);
          System.out.println(myMenu.getMenuName());
        }
      }
    }