我是要对数据库中的某个频道表做处理。
数据库中有频道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); //输出了所有一级频道名
}
} 我想达到的效果是:
一级栏目
二级栏目
二级栏目
三级栏目
一级栏目
二级栏目
二级栏目 这样的迭代如何写?
数据库中有频道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); //输出了所有一级频道名
}
} 我想达到的效果是:
一级栏目
二级栏目
二级栏目
三级栏目
一级栏目
二级栏目
二级栏目 这样的迭代如何写?
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嘛?为什么不用泛型!
笔误。