我有一个表
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中~~~~~~~~~~~~~~~~~~~~~·
谢谢,十分感谢!!!!!
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中~~~~~~~~~~~~~~~~~~~~~·
谢谢,十分感谢!!!!!
tb_bookType
id name
1 书本
2 电脑 tb_books
id name typeid
1 语文书 1
2 数学书 1
3 台式电脑 2
4 笔记本 2要查类型是“书本”的书 只要查 表tb_books 中对应typeid为 1 的就可以。如果数据表不可修改了,我觉得首先这个数据库表设计是有问题的。
如果数据库表不可修改,非要这样做。
我横看竖看 怎么也找不到关联 没有关系不好做。敬请高人。
parID!=rs.getInt("parentId"))
必须先定义 int tt=rs.getInt("parentId")) ;
parId!=tt;
这样才行!!
OH MY GOD~~~~~~~~~~~~呵呵·搞了很久!!!