遞歸產生node_id=1001635872下的所有子結點﹐條件是isFolder=1的遞歸寫法:
select * from NodesTable where isFolder=1 start with NodeId=1001635872 connect by prior NodeId=parentId.
給我們大家打上高分吧。
select * from NodesTable where isFolder=1 start with NodeId=1001635872 connect by prior NodeId=parentId.
給我們大家打上高分吧。
Tree from DB
|_Pets
| |_Birds(1表示这里是个文件夹)
| | |_Parakeet(0表示这是最后一个节点)
| |_Mammals
|_Farm
| |_
| |_
|_不够分可以加!谢谢了。目的想达到查询数据库的次数最少!
在pl/sql和sql查询器都不能实现的.
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());
}
}
}