您的位置:首页 > 其它

用树状结构显示BBS的帖子及其回帖,使用递归方法.

2016-03-06 23:43 507 查看
MySQL建表语句:

create database bbs;

use bbs;

create table article(
id int primary key auto_increment,
pid int,
rootid int,
title varchar(255),
cont text,
pdate datetime,
isleaf int
);

insert into article values (null, 0, 1, '蚂蚁大战大象', '蚂蚁大战大象', now(), 1);
insert into article values (null, 1, 1, '大象被打趴下了', '大象被打趴下了', now(), 1);
insert into article values (null, 2, 1, '蚂蚁也不好过', '蚂蚁也不好过', now(), 0);
insert into article values (null, 2, 1, '瞎说', '瞎说', now(), 1);
insert into article values (null, 4, 1, '没有瞎说', '没有瞎说', now(), 0);
insert into article values (null, 1, 1, '怎么可能', '怎么可能', now(), 1);
insert into article values (null, 6, 1, '怎么没可能', '怎么没可能', now(), 0);
insert into article values (null, 6, 1, '可能性是很大的', '可能性是很大的', now(), 0);
insert into article values (null, 2, 1, '大象进医院了', '大象进医院了', now(), 1);
insert into article values (null, 9, 1, '护士是蚂蚁', '护士是蚂蚁', now(), 0);

JAVA程序
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 用树状结构显示BBS的帖子及其回帖,使用递归方法
* 输出结果:
* 蚂蚁大战大象
* 大象被打趴下了
* 蚂蚁也不好过
* 瞎说
* 没有瞎说
* 大象进医院了
* 护士是蚂蚁
* 怎么可能
* 怎么没可能
* 可能性是很大的
* @author E-Kunt
*
*/

public class bbs {

public static void main(String[] args) {
new bbs().show();
}

//显示所有帖子
public void show() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=tiger&useSSL=true");
stmt = conn.createStatement();
String sql = "select * from article where pid = 0";
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString("cont"));
showChildren(conn,rs.getInt("id"),1);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}

}
}

//递归显示回复的帖子
private void showChildren(Connection conn, int id, int level) {
Statement stmt = null;
ResultSet rs = null;
StringBuffer sb = new StringBuffer("");

for(int i = 0; i < level; i++) {
sb.append(" ");
}

try {
stmt = conn.createStatement();
String sql = "select * from article where pid = " + id;
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.println(sb + rs.getString("cont"));
if(rs.getInt("isLeaf") != 0)
showChildren(conn,rs.getInt("id"),level + 1);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
} catch (SQLException e) {
e.printStackTrace();
}

}

}

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