我有一个表
bid  bName   pid
1     书本    0
2     电脑     0
3     语文书  1
4     数学书   1
5     台式电脑  2
6     笔记本    2
我想实现它的主版块与子版块的嵌套循环输出  
即:
主板块:  书本
子版块: 语文书,数学书
==========================
主版块    电脑
子版块:台式电脑   笔记本public Map findBoard() {
Map map=new HashMap();
List list=new ArrayList();
String sql="select * from board order by parentId";
try {
conn=this.getConn();
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery(); 
                        int  parID=0;
while (rs.next()) {

if (parID!=rs.getInt("parentId")) {
map.put(parID+"", list);  //实现存子版块的map
list=new ArrayList();//通过实例化,又初始值,再存入
parID=rs.getInt("parentId");//从新赋值给parID

Board board=new Board();
board.setBoardId(rs.getInt("boardId"));
board.setBoardName(rs.getString("boardName"));
board.setParentId(rs.getInt("parentId"));
list.add(board);
}
map.put(parID+"", list);
} catch (Exception e) {
// TODO: handle exception
System.out.println("findBoard的Map方法出异常");
e.printStackTrace();
}finally{
this.closeAll(conn, pstmt, rs);
}
return map;
}
下面是测试类BoardDao boardDao=new BoardDaoImpl();
Map mapBoard=boardDao.findBoard(); List listBoard=(List)mapBoard.get(0);
for (int i = 0; i < listBoard.size(); i++) {
Board board=(Board)listBoard.get(i);
System.out.println("主版块"+board.getBoardName());
List listSunBoard=(List)mapBoard.get(board.getBoardId()+"");
if (listSunBoard!=null) {
     for (int j = 0; j <listSunBoard.size(); j++) {
Board sunBoard=(Board) listSunBoard.get(j);
     if(sunBoard.getParentId()==board.getBoardId()){
System.out.println("子版块"+sunBoard.getBoardName());
System.out.println("===============");
}
}
     }else{
System.out.println("暂无子版块");
System.out.println("===============");
}
}
他输出来的出现错误
我把
            if (parID!=rs.getInt("parentId")) {
map.put(parID+"", list);  //实现存子版块的map
list=new ArrayList();//通过实例化,又初始值,再存入
parID=rs.getInt("parentId");//从新赋值给parID
}
 这行代码去掉,他运行就是正确的,但是输出来的效果,是全部都认为是主版块,而不是我想要的效果
请求各位大哥帮帮忙!好吗?
或有还有其他别的方法能够输出来放入MAP中~~~~~~~~~~~~~~~~~~~~~·
谢谢,十分感谢!!!!!

解决方案 »

  1.   

    建议把这个表拆成2个表
    tb_bookType
    id name
    1  书本
    2  电脑 tb_books
    id name   typeid
    1  语文书    1
    2  数学书    1
    3  台式电脑  2
    4  笔记本    2要查类型是“书本”的书 只要查 表tb_books 中对应typeid为 1 的就可以。如果数据表不可修改了,我觉得首先这个数据库表设计是有问题的。
    如果数据库表不可修改,非要这样做。
    我横看竖看 怎么也找不到关联 没有关系不好做。敬请高人。
      

  2.   

    恩,谢谢各位。我已经找出问题的所在了!
    parID!=rs.getInt("parentId")) 
    必须先定义 int tt=rs.getInt("parentId")) ;
    parId!=tt;
    这样才行!!
    OH MY GOD~~~~~~~~~~~~呵呵·搞了很久!!!