您的位置:首页 > 其它

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

2008-04-11 20:45 721 查看
//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);

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐