[学习笔记]小型论坛功能——实现树状结构的主题贴显示的类[2]

 //article.java

//存放贴子信息

package com.bbs.model;

/**
 *
 * @author he
 * 用来建立树状的主题显示贴的各属性
 * 本类个个变量都是数据库中bbs.sql表中的每一列
 */
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

public class Article {
 private int id;        //本贴id 
 private int pid;       //父贴id
 private int rootid;    //根贴id
 private String title;  //标题
 private String cont;   //内容
 private Date pdate;    //发贴日期
 private boolean isLeaf;//是否是叶子结点 true[后面还有跟贴]  false[无跟贴]
 private int grade;     //贴子级别

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public int getRootid() {
        return rootid;
    }

    public void setRootid(int rootid) {
        this.rootid = rootid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCont() {
        return cont;
    }

    public void setCont(String cont) {
        this.cont = cont;
    }

    public Date getPdate() {
        return pdate;
    }

    public void setPdate(Date pdate) {
        this.pdate = pdate;
    }

    public boolean isIsLeaf() {
        return isLeaf;
    }

    public void setIsLeaf(boolean isLeaf) {
        this.isLeaf = isLeaf;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
   
      //.....对from和resultSet
  //封装
  public void initFormRs(ResultSet rs){
   try{
   setId(rs.getInt("id"));
   setPid(rs.getInt("pid"));
   setRootid(rs.getInt("rootid"));
   setTitle(rs.getString("title"));
   setCont(rs.getString("cont")); //首页不用内容
   setPdate(rs.getTimestamp("pdate"));
   setIsLeaf(rs.getInt("isLeaf") == 0?true:false);
   setGrade(0);
   }catch(SQLException e){
    e.printStackTrace();
   }
  }
 
}

 

//arcticManager.java

管理贴子(显示树状的类)

package com.bbs.model;

import com.bbs.util.DB;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author he
 * 用来完成对Article内属性的操作。
 * 实现如何树状显示的方法。
 *
 */
public class ArticleManager {
   
    /**
     * 显示级别树
     *
     *
     * private void tree(List<Article> articles,
     *                          Connection conn,int id,int grade)
     * 参数说明:
     * articles 为Article的对象
     * id       表示帖子id号
     * grade    id对应的级别
     *
     * 思路为:
     * [1]列出pid=参数 mid 的结果集[用SQL语句查]
     * [2]将结果集内所有的元组放入到Article对象中
     * [3] 判断结果集每一行中的 isleaf列的值
     *          if  是0
     *              则表示并非叶子,就需要查找数据表中
     *              其pid=当前id[设为nid]的元组
     *              再调用此方法,将nid传给参数id,grade+1传给参数grade
     *              重复执行[1][2]
     *        else 
     *              什么也不用做
     */
  public static void showTree(List<Article> article,Connection conn,int id,int grade){
       String sql = "select * from article where pid= " + id; //id为int类型不用'
          
            Statement stmt = null;
            ResultSet rs = null;
      try {
             conn = DB.getConnection();
            stmt = DB.getStmt(conn);
            rs = DB.executeQuery(stmt, sql);
            while (rs.next()) {
                Article a=new Article();
                a.initFormRs(rs);
                a.setGrade(grade);
                article.add(a);
                if(!a.isIsLeaf()){
                   showTree(article,conn,a.getId(),grade+1);
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticleManager.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
        DB.close(null,stmt,rs);
        }
  }
  /**
   * 测试方法的正确性
   */
 
 public  static void main(String args[]){
  List<Article> list = new ArrayList<Article>();
  Connection conn=DB.getConnection();
  ArticleManager.showTree(list, conn, 0, 0);
  DB.close(conn,null, null);
  for(int i=0;i<list.size();i++){
     String ss=list.get(i).getCont();
     System.out.println(ss);

  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值