职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1052|回复: 0

实现论坛树型结构的具体算法

[复制链接]
weisheng 发表于 2006-12-2 16:12 | 显示全部楼层 |阅读模式
实现论坛树型结构的算法很多,具体你可以去www.chinaasp.com的全文搜索中查询。我现在的JSP论坛采用的也是当中的一种:不用递归实现树型结构的算法,现在我将论坛树型结构的具体算法和大家介绍一下,和大家一起交流。



1。演示表的结构:
表名:mybbslist
字段
数据类型
说明
BBSID 自动编号  
RootID Int 根帖ID,本身为根帖则RootID = ID
FID Int 父帖ID,上一层帖子的ID,如是根帖则FID = 0
DEPTH Int 根帖Level=0,其他依据回复的深度递增
BBSSubject Char 主题



2。创建表:
create table mybbslist (
forumID int(20) not null,
bbsID int auto_increment primary key,
rootid int(20) not null,
fid int(20) not null,
depth int(20) not null,
userID int(20) not null,
bbsUser varchar(24) not null,
bbsSubject varchar(100) not null,
bbsContent text,
bbsTime varchar(30),
bbsRead int(20),
bbsReply int(20),
INDEX forumID (forumID))



3。连接MYSQL数据库的BEAN
package netzero;
import java.sql.*;
public class mydb
{
String driverName = \"org.gjt.mm.mysql.Driver\";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String connURL= \"jdbc:mysql://localhost/mybbs?user=root&password=how&useUnicode=true&characterEncode=8859_1\";
//String connURL= \"jdbc:mysql://localhost/netzerobbs?user=root&password=how\";
public mydb()
{
try
{
Class.forName(driverName);
}
catch (java.lang.ClassNotFoundException e)
{
System.err.println(\"netzero(String): \" + e.getMessage());
}
}



public ResultSet executeQuery(String sql) throws SQLException
{
conn = DriverManager.getConnection(connURL);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
return rs;
}



public boolean closeConn()
{
try
{
if (rs!=null) rs.close();
if (stmt!=null) stmt.close();
if (conn!=null) conn.close();
return true;
}
catch ( SQLException ex )
{
System.err.println(\"closeConn: \" + ex.getMessage());
return false;
}
}



}



4。显示论坛的JSP程序
<jsp:useBean id=\"mybbs\" scope=\"session\" class=\"netzero.mydb\" />
<%@ page contentType=\"text/html;charset=gb2312\" %>
<%@ page import=\"java.io.*\" %>
<%@ page import=\"java.sql.*\" %>
<%
int intRowCount;
out.print(\"显示论坛树形结构\");
out.print(\"<br><br>\");
try {
String sql=\"select * from mybbslist order by rootid desc,depth,fid,bbsid\";
ResultSet rs = mybbs.executeQuery(sql);
if (rs.next())
{
rs.last();
intRowCount=rs.getRow();
out.print(\"论坛树中有\");
out.print(intRowCount);
out.print(\"个叶子节点\");
rs.first();
int j=0;
int Depth = 0;
out.print(\"<ul>\");
while(j<intRowCount)
{
int rsDepth=rs.getInt(\"Depth\");
if (rsDepth<Depth)
{
for(int i=1;i<Depth+1;i=i+1)
{
out.print(\"</ul>\");
}
}
rsDepth=rs.getInt(\"Depth\");
if (rsDepth>Depth)
{
out.print(\"<ul>\");
}
out.print(\"<li>\");



String bbssubject=rs.getString(\"bbssubject\");
out.print(bbssubject);
out.print(\"</li>\");
Depth = rs.getInt(\"Depth\");
j=j+1;
rs.next();
}
out.print(\"</ul>\");
}
else
{
out.print(\"数据库中无记录\");
}
}catch (SQLException E) {
out.println(\"SQLException: \" + E.getMessage());
out.println(\"SQLState: \" + E.getSQLState());
out.println(\"VendorError: \" + E.getErrorCode());
}
%>
<% //关闭mysql连接
try {
if(!mybbs.closeConn());
} catch (Exception ex) {
System.err.println(\"closeConn: \" + ex.getMessage());
}
%>
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-18 00:11 , Processed in 0.114568 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表