日期:2014-05-18  浏览次数:20659 次

递归循环是从向量中取数据,生成一棵树
我找了一个递归循环生成树,可使只能显示一部分,不能完全从数据库里取出数据,我先将循环部分代码贴出:
rootNode       =       new       DefaultMutableTreeNode( "Root ");          
    jTreeCatalog       =       new       JTree(rootNode);          
    //调用递归生成树方法      
    generateCatalogTree(0,rootNode);      
    //递归生成树方法      
    //-----       pNode是父节点       ------   ID为节点的ID,对应数据库表中的ID字段          
    private   void   generateCatalogTree(int   ID,DefaultMutableTreeNode     pNode){          
    //循环递归id       parentid          
    ResultSet       rs=null;          
    DefaultMutableTreeNode       childNode       =       null;          
    try{          
    st.setInt(1,ID);          
    rs       =       st.executeQuery();          
    while       (rs.next()){          
    childNode=new   DefaultMutableTreeNode(rs.getString( "Name ").trim());          
    pNode.add(childNode);          
    generateCatalogTree(rs.getInt( "ID "),childNode);          
    }          
    }catch(Exception       e){          
    e.printStackTrace();          
    }          
    }

递归循环由子目录返回到父目录时,父目录的结果集已经关闭会出错。
原贴的解决办法是:先将数据取出来存入向量中,递归循环是从向量中取数据。
可使我不知道怎么使用向量取数据,还请各位高手帮帮忙!!!
最好写出循环的代码,谢谢!

------解决方案--------------------
使用ArrayList就可以。
------解决方案--------------------
这个会关闭是因为用了同一个Statement的问题,如果用两个不同的Statement产生一个父结果集一个子结果集,我想应该不会出现这样的问题吧.关注
------解决方案--------------------
在递归循环中不停的取ResultSet效率是很低的,楼主还是应该先把数据全取出来再构造树

可以考虑用Oracle的Connect By语句将数据库中的数据按照父子关系排列好,然后后续的处理就方便多了


------解决方案--------------------
弄个二维数组好了.A[2][rowcount] A[0][rowcount]=self_imformation A[1][rowcount]=parent_imformation