递归生成树的方法(子id,父id)【转】

/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package treeMenu;
import java.util.*;
import java.sql.*;
import dbmanager.DBConnection;
import javax. Servlet . JSP .JspWriter;
/**
* @author 呆猴 lucky
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class Tree {
    private DBConnection conn;
    public ArrayList arrayid;//定义包含所有id的数组
    public ArrayList arrayname;//定义包含所有名称的数组
    public ArrayList arrayparent;//定义包含所有父id的数组
    public ArrayList class1_id;//定义包含所有一级信息id的数组
    public Tree(){
    try{
      conn=new DBConnection();
    }
    catch(Exception e){
      System.out.println("sorry");
    }
    }
    /**
     *
     * 定义读取所有相关记录和一级信息的方法
     */
    public void buidTreeinit() throws SQLException{
    ResultSet rs=conn.runRs("select * from sp_sys_menu_item");
    String aa="";
    String id="";
    String name="";
    String parent_id="";
    int i=0;
    arrayid=new ArrayList();
    arrayname=new ArrayList();
    arrayparent=new ArrayList();
    class1_id=new ArrayList();
    while(rs.next()){
     id=rs.getString("id");
     name=rs.getString("name");
     parent_id=rs.getString("parent_id");
     arrayid.add(id);//把所有id信息赋值到arrayid数组中
     arrayname.add(name);//把所有name信息赋值到arrayname数组中
     arrayparent.add(parent_id);//把所有parent_id信息赋值到arrayparent数组中
     /**
      * 把所有的一级信息赋值到数组class1_id中
      */
     if(parent_id.equals("0"))
      {
      class1_id.add(id);
      }
    }
    conn.free();
    }
    /**
     * 开始定义树型结构的构造
     * @param parentid
     * @throws SQLException
     */
    public void buildTree(JspWriter out,String parentid,int j) throws Exception{
        j++;
   ArrayList tmplist=new ArrayList();//包含所有父id为parent_id的记录的名称数组
   String mmm="    ";
   String nnn="|";
   for(int q=0;q<j;q++){
      nnn=nnn+"--";
      mmm=mmm+"    ";
   }
      String table2="";
      table2=table2+"<tr bgcolor=\"#FFFFFF\">";
      table2=table2+"<td width=\"70%\" height=\"30\">"+mmm+nnn+" <name></td>";
      table2=table2+"<td width=\"30%\" height=\"30\" align=\"center\">";
      table2=table2+"修改  ";
      table2=table2+"注册下级菜单  ";
      table2=table2+"  <del>";
      table2=table2+"</td>";
      table2=table2+"</tr>";
   while(arrayparent.indexOf(parentid)!=-1)
   {
     String tmpname=(String)arrayname.get(arrayparent.indexOf(parentid));//获取所有父id为parent_id的记录的名称
     String tmpid=(String)arrayid.get(arrayparent.indexOf(parentid));//获取该子信息的id,用于赋予下级子信息的父id
     if(has_child(tmpid)){
     out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>",""));
     }
     else{
     out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>","删除"));
     }
     int tmp=arrayparent.indexOf(parentid);//获取参数parent_id所在位置
     arrayparent.remove(tmp);//删除参数parent_id所在位置的parent_id
     arrayid.remove(tmp);//删除参数parent_id所在位置的id
     arrayname.remove(tmp);//删除参数parent_id所在位置name
     if(has_child(tmpid))//如果该条信息有相关子信息重新执行buildTree方法
       {
            buildTree(out,tmpid,j);
       }
­
   }
    }
    /**
     * 进行是否有子信息判断
     * @param parentid
     * @return
     */
    public boolean has_child(String parentid)
    {
     boolean bb=false;
­
     if(arrayparent.indexOf(parentid)!=-1)
     {
­
      bb=true;
­
     }
     return bb;
    }
    /**
     * 树型结构显示
     * @param args
     * @throws Exception
     */
    public void showTree(JspWriter out) throws Exception{
     Tree aa=new Tree();
        aa.buidTreeinit();
        String table1="";
        table1=table1+"<tr bgcolor=\"#CCCCCC\">";
        table1=table1+"<td width=\"70%\" height=\"30\">  <name></td>";
      table1=table1+"<td width=\"30%\" height=\"30\" align='center'>";
      table1=table1+"修改  ";
      table1=table1+"注册下级菜单  ";
      table1=table1+"  <del>";
      table1=table1+"</td>";
        table1=table1+"</tr>";
        for(int i=0;i<aa.class1_id.size();i++)
        {
         if(aa.has_child((String)aa.class1_id.get(i))){
         out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>",""));
         }
         else{
         out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>","删除"));
         }
         aa.buildTree(out,(String)aa.class1_id.get(i),0);
        }
    }
}
数据库 连接和数据库操作类:
/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package dbmanager;
import java.sql.*;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class DBConnection {
String user="sa";
String password="sa";
String sDBDriver="com.microsoft. JDBC .sqlserver.SQLServerDriver";
String sConnStr="jdbc:microsoft:sqlserver://172.16.204.10:1433;DatabaseName=HLSP_MIS";
Connection connect=null;
ResultSet rs=null;
Statement stmt = null, stmt1 = null;
public DBConnection(){
  try{
   Class.forName(sDBDriver);
   connect = DriverManager.getConnection(sConnStr,user,password);
   stmt = connect.createStatement();
   stmt1=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  }
  catch(Exception e){
      System.err.println(e.getMessage());
  }
}
//执行数据库查询
public ResultSet runRs(String sql){
rs=null;
try{
rs=stmt1.executeQuery(sql);
}
catch(SQLException ex){
System.err.println(ex.getMessage());
}
return rs;
}
//执行数据库其他操作
public  boolean  executeSql(String sql)
{
boolean che=false;
try
{
stmt.executeUpdate(sql);
che=true;
}
catch (SQLException ex)
{
System.err.println(ex.getMessage());
che=false;
}
return che;
}
//进行数据库连接释放
public boolean free(){
try {
  connect.close();
  if (stmt!=null){
   stmt.close();
      }
  if(stmt1!=null){
       stmt1.close();
      }
  return true;
  }
  catch (Exception e) {
  return false;
  }
}
}

你可能感兴趣的:(数据结构,sql,jdbc,Microsoft,J#)