最近一个小项目中,数据库中的记录大概有3000多条,要生成一颗树,我是应该初始时全部加载呢,还是有其他的方法。
我写了一个递归加载所有内容的例子,但是效率太低了 ,50秒才能生成。
下面是核心代码
本人是刚学习的菜鸟,望多多指教!
- Java code
public void showTreeNode(DefaultMutableTreeNode node, int pid){ Connection conn = DB.getConn(); Statement stmt = DB.createStmt(conn); ResultSet rs = DB.executeQuery(stmt, "select nameid, id from u_module where pid="+pid); try { while(rs.next()){ DefaultMutableTreeNode m = new DefaultMutableTreeNode(rs.getString("nameid")); int sid = rs.getInt("id"); if(hasNode(sid)){ showTreeNode(m,sid); } node.add(m); } } catch (SQLException ex) { DB.close(conn); DB.close(stmt); DB.close(rs); ex.printStackTrace(); } DB.close(conn); DB.close(stmt); } public boolean hasNode(int id){ Connection conn = DB.getConn(); Statement stmt = DB.createStmt(conn); ResultSet rs = DB.executeQuery(stmt, "select id from u_module where pid="+id); try { if(rs.next()){ DB.close(conn); DB.close(stmt); return true; } } catch (SQLException ex) { ex.printStackTrace(); } DB.close(conn); DB.close(stmt); return false; } public void init() { if(hasNode(0)){ showTreeNode(root,0); } jf = new JFrame("树"); tree = new JTree(root); //获取JTree对应的TreeModel对象 model = (DefaultTreeModel)tree.getModel(); //设置JTree可编辑 tree.setEditable(true); tree.setRootVisible(false) ;
------解决方案--------------------------------------------------------
访问了好多次数据库啊,时间都花在读数据库上了. 拆分一下吧,读一次数据库,然后用代码判断,添加节点.