日期:2014-05-19  浏览次数:20801 次

jdbc查询数据库 如何得到树结构的数据呢
比如:
public class Menu(){
  private int id;
  private String name;
  private int pid;
  private List<Menu> menu;//二级菜单。

}
就这样的!那么我用jdbc的话 我应该怎么查询呢。我是先查询一级.然后再根据pid去查询二级。这样子不对吧 这样用了什么N+1次查询。想知道 如何通过一次查询就能达到目的!即查询当前菜单以及其子菜单。
(还有我查询出来后 页面如何遍历为一颗树那种....一级作为根,二级作为叶子):
新闻列表
    --体育新闻
    --军事新闻
    --国际新闻
我可以这样遍历
${menu.name}(对应比如 新闻列表)
    ---
    ---
    ---
二级菜单如何遍历???
   
   

------解决方案--------------------
这个一般都是先把所有数据查出来,然后自己构造这个大对象
------解决方案--------------------
你的表中应用包括
nodeId,parentNodeId  两个key。

在init树的时候,要读表中的每一个记录,这也是必须的,因为每个记录都是你树上的节点。
然后开始组装:

//step1:将所有node都初始化
Node node = new Node(nodeId,xxx,xxx);
...
//step2:建立关系
node.setParent(getParentById(parentNodeId);
...

------解决方案--------------------
List<Menu> menu;//二级菜单。
据此判断只存在一个menu表,这个表里有一个PID(上级菜单编号)字段

第一个需求,就是全查吧(select * form menu)
然后一点一点遍历这个结果集,把这个对象创建出来

第二个需求,哈哈,来个歪招儿:重写Menu类的toString方法,在方法里把name和所有子菜单拼起来,这个不就递归输出了当然,这招可能有点损
------解决方案--------------------
Orcale好像专门有个SQL语句 生成树这样的结果集  以前老师演示过 你百度一下
------解决方案--------------------
如果是oracle直接有递归查询,其它数据库没办法,只能用代码实现了,数据库必须要有节点ID和上级节点ID,
然后去网上下载个dTree(js写的树),用起来挺方便的,
------解决方案--------------------
全部查出来在自己遍历整个对象集构造分级树 js上有个很方便的zTree写好的传对象集的json过去自动帮你树形排列
------解决方案--------------------


参考:http://blog.csdn.net/m13666368773/article/details/7531592



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
     <title></title>
     <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(document).ready(function () {
 
             var zNodes = [
             { id: 1, pId: 0, name: ".Net技术" },
             { id: 2, pId: 0, name: "编程语言" },
             { id: 3, pId: 0, name: "软件设计" },
             { id: 4, pId: 1, name: ".Net新手区" },
             { id: 5, pId: 1, name: "Asp.Net" },