最近一个小项目中,数据库中的记录大概有3000多条,要生成一颗树,我是应该初始时全部加载呢,还是有其他的方法。我写了一个递归加载所有内容的例子,但是效率太低了 ,50秒才能生成。
下面是核心代码 本人是刚学习的菜鸟,望多多指教! 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) ;
下面是核心代码 本人是刚学习的菜鸟,望多多指教! 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) ;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货