我是要对数据库中的某个频道表做处理。 
数据库中有频道ID,父频道ID,频道名这样几个字段。 
我用Collection集合将所有的频道属性都取了出来,通过Iterator做迭代,关键代码如下: 
Iterator it = all.iterator(); //all是Collection集合的引用 
ChannelVO channelVO = null; 
//ChannelVO我自己定义的JAVAbean,该JAVAbean中有三个属性channelid(频道ID),channelname(频道名),parentid(父ID) 
while(it.hasNext()){ 
  channelVO = new ChannelVO(); 
  channelVO = (ChannelVO)it.next(); 
  if(channelVO.getParentid() == 0){ 
    System.out.println(channelVO.getChannelname); //输出了所有一级频道名 
  } 
} 我想达到的效果是: 
一级栏目 
      二级栏目 
      二级栏目 
              三级栏目 
一级栏目 
      二级栏目 
      二级栏目 这样的迭代如何写? 

解决方案 »

  1.   

    用一个 level 成员变量来表示栏目的级别。
      

  2.   

    --一级
    select 0 superid, channelid ,channelname from channel where parentid=0 union
    --二级
    select two.channelid, channel.channelid ,channel.channelname 
    from channel,(select channelid from channel where parentid=0) two 
    where two.channelid=channel.parentid union 
    --三级
    select three.channelid ,channel.channelid ,channel.channelname 
    from channel ,(select channel.channelid channelid from channel,(select channelid from channel where parentid=0) two 
    where two.channelid=channel.parentid) three where three.channelid=channel.parentid
    上面是一条SQL!结果是下面的样子:
    父id   自己id 频道名 
    0 1 1
    0 2 1
    1 7 2
    1 8 2
    2 5 2
    2 6 2
    6 11 3
    6 12 3
    6 15 3
    7 9 3
    7 13 3
    8 10 3
    8 14 3
    当然本程序不需要上面的SQL,直接用select parentid, channelid ,channelname from channel把结果集放到一个特定的集合
    这个集合的要求如下,map(父id,ChannelVO);
    这个map自己实现吧,不会很难!这个map可不是java里的那个hashmap什么的,看下面的要求。
    我们取ChannelVO[] cv=map.get(0);//因为0对应有两条,所以cv[0]的值1,1 cv[1]的2,1! 
    我们取ChannelVO[] cv=map.get(6);//因为6对应有三条,所以cv[0]的值11,3 cv[1]的12,3 cv[2]的15,3!
    String sql="select parentid, channelid ,channelname from channel";
    把结果集放到map里。
    while(rs.next()){
      ChannelVC temp=new ChannelVO();
      temp.setChannelid(rs.getInt("channelid"));
      temp.setChannelName(rs.getString("channelname"));
      map.put(rs.getInt("parentid",temp));
    }
    OK开始真正的叠代
    for(ChannelVO first:map.get(0)){
             System.out.println(first.getName());//第一级
                                         //跟椐自己的id,从map里找出自己的子结点!
         for(ChannelVO second:map.get(first.getChanelId())){
                        System.out.println(second.getName());//第二级
                                  //跟椐自己的id,从map里找出自己的子结点!
                for(ChannelVO three:map.get(second.getparent())){        
                                System.out.println(three.getName());//第三级
                           }
             }
    }
    呵呵,这是我回帖最细的一次了,给分呀!
    channelVO = new ChannelVO(); 
      channelVO = (ChannelVO)it.next(); 
     
    错啦,改成ChannelVO channelVO=(ChannelVO)it.next();
    不过你用的是1.4嘛?为什么不用泛型!
      

  3.   

    second.getparent()改成getChannelId();
    笔误。
      

  4.   

    这个问题我用其他的方式解决了,hl_ghost讲了这么多怎么也要给些辛苦费啦~~