最近打算做一个bbs作为数据库的课程设计,并且打算将它作为今年的收官之战,所以想做的好一点,于是找了马士兵老师的bbs视频看了看,发现树形结构又忘了,在这里总结一下~
实现树形结构必须使用递归,思想就是从pid为0的节点(根节点)开始找,判断它是否是叶子,若不是,则继续递归他(以这个节点的id为pid找到他的儿子们),直到它是叶子为止。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Reg {
/**
* @param args
*/
public static void main(String[] args) {
//通过db类得到connection,与普通的java链接数据库一样
Connection conn = DB.getConnection();
List<Article> list = new ArrayList<Article>(); //使用一个list来装节点
Tree(conn,0,0,list);
}<pre name="code" class="java">public class Article {
private int id;
private int pid;
private int rootid;
private String title;
private String cont;
private Date pdate;
private int isleaf;
private int grade;
//the method to initial
public void initial(ResultSet rs){
try {
setId(rs.getInt("id"));
setCont(rs.getString("cont"));
setPid(rs.getInt("pid"));
setCont(rs.getString("cont"));
setIsleaf(rs.getInt("isleaf"));
setRootid(rs.getInt("rootid"));
setTitle(rs.getString("title"));
setPdate(rs.getDate("pdate"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//grade表示在树中的层数,id表示的是找到以这个id为父节点的子节点public static void Tree(Connection conn,int id,int grade,List<Article> list){ //每次都找到以这个id对应的节点的儿子,开始为0(根) String sql = "select * from article where pid =" + id; try{ Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ Article a = new Article(); a.initial(rs);//这个方法去初始化a,将rs所指向的节点的值赋值到a那里 list.add(a); if(a.getIsleaf()!=0){ //重新以此时这个节点的id为pid,再找到它的儿子们,并且此时儿子们的grade加多了一层 Tree(conn,a.getId(),grade+1,list); } }}catch(Exception e){e.printStackTrace();}finally{//关闭conn等东西}}} article类:
public class Article {
private int id;
private int pid;
private int rootid;
private String title;
private String cont;
private Date pdate;
private int isleaf;
private int grade;
//the method to initial
public void initial(ResultSet rs){
try {
setId(rs.getInt("id"));
setCont(rs.getString("cont"));
setPid(rs.getInt("pid"));
setCont(rs.getString("cont"));
setIsleaf(rs.getInt("isleaf"));
setRootid(rs.getInt("rootid"));
setTitle(rs.getString("title"));
setPdate(rs.getDate("pdate"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
总得来说就是这样,方便大家复习也方便自己哈哈~~(有热心人告诉我怎么把代码漂亮的添加进去么)??