[学习笔记]小型论坛功能——实现树状结构的主题贴显示的类[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);
}
}
}
//存放贴子信息
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);
}
}
}
相关文章推荐
- [学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[3]
- [学习笔记]小型论坛功能——连接数据库 [1]
- [学习笔记]小型论坛功能——初步论坛形式[终]
- PHP学习笔记 2009-8-25 实现分页显示功能
- Flask学习总结笔记(8) -- 利用Flask-mail实现电子邮件发送功能
- OpenCV 2.4.9 学习笔记(1)—— 基本功能结构
- 部门下拉框的树状结构展示小功能的实现
- 【Ubuntu+OpenCV】ubuntu/linux环境下,运用opencv实现图像的读入、显示--学习笔记【1】
- Win内核原理与实现学习笔记3-windows系统结构
- 通过串口实现stm32的IAP功能————stm32学习笔记
- 网上图书商城项目学习笔记-004注册页面前后台的验证、注册功能实现、激活功能实现
- Silverlight 学习笔记——MVVM模式实现主从数据显示
- Silverlight 学习笔记——MVVM模式实现主从数据显示
- 安卓学习笔记---自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示(矩形圆角加边框)
- Java-J2SE学习笔记-树状展现文件结构
- JDCB学习笔记 -- day05 实现一个用户的登录功能及解决SQL注入问题
- MonoRail学习笔记五:定制服务实现自定义功能
- 安卓学习笔记---Android实现页面悬浮显示
- 【黑马程序员】简单拍照功能的实现(学习笔记)之一
- node.js学习笔记——学生信息管理的实现(把功能模块化)使用官方提供的http模块实现