实现论坛树型结构的算法很多,具体你可以去www.chinaasp.com的全文搜索中查询。我现在的JSP论坛采用的也是当中的一种:不用递归实现树型结构的算法,现在我将论坛树型结构的具体算法和大家介绍一下,和大家一起交流。
1。演示表的结构:
表名:mybbslist
字段
数据类型
说明
BBSID自动编号
RootIDInt根帖ID,本身为根帖则RootID=ID
FIDInt父帖ID,上一层帖子的ID,如是根帖则FID=0
DEPTHInt根帖Level=0,其他依据回复的深度递增
BBSSubjectChar主题
2。创建表:
createtablemybbslist(
forumIDint(20)notnull,
bbsIDintauto_incrementprimarykey,
rootidint(20)notnull,
fidint(20)notnull,
depthint(20)notnull,
userIDint(20)notnull,
bbsUservarchar(24)notnull,
bbsSubjectvarchar(100)notnull,
bbsContenttext,
bbsTimevarchar(30),
bbsReadint(20),
bbsReplyint(20),
INDEXforumID(forumID))
3。连接MYSQL数据库的BEAN
packagenetzero;
importjava.sql.*;
publicclassmydb
{
StringdriverName="org.gjt.mm.mysql.Driver";
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
StringconnURL="jdbc:mysql://localhost/mybbs?user=root&password=how&useUnicode=true&characterEncode=8859_1";
//StringconnURL="jdbc:mysql://localhost/netzerobbs?user=root&password=how";
publicmydb()
{
try
{
Class.forName(driverName);
}
catch(java.lang.ClassNotFoundExceptione)
{
System.err.println("netzero(String):"+e.getMessage());
}
}
publicResultSetexecuteQuery(Stringsql)throwsSQLException
{
conn=DriverManager.getConnection(connURL);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
returnrs;
}
publicbooleancloseConn()
{
try
{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();
returntrue;
}
catch(SQLExceptionex)
{
System.err.println("closeConn:"+ex.getMessage());
returnfalse;
}
}
}
4。显示论坛的JSP程序
<jsp:useBeanid="mybbs"scope="session"class="netzero.mydb"/>
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.io.*"%>
<%@pageimport="java.sql.*"%>
<%
intintRowCount;
out.print("显示论坛树形结构");
out.print("<br><br>");
try{
Stringsql="select*frommybbslistorderbyrootiddesc,depth,fid,bbsid";
ResultSetrs=mybbs.executeQuery(sql);
if(rs.next())
{
rs.last();
intRowCount=rs.getRow();
out.print("论坛树中有");
out.print(intRowCount);
out.print("个叶子节点");
rs.first();
intj=0;
intDepth=0;
out.print("<ul>");
while(j<intRowCount)
{
intrsDepth=rs.getInt("Depth");
if(rsDepth<Depth)
{
for(inti=1;i<Depth+1;i=i+1)
{
out.print("</ul>");
}
}
rsDepth=rs.getInt("Depth");
if(rsDepth>Depth)
{
out.print("<ul>");
}
out.print("<li>");
Stringbbssubject=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(SQLExceptionE){
out.println("SQLException:"+E.getMessage());
out.println("SQLState:"+E.getSQLState());
out.println("VendorError:"+E.getErrorCode());
}
%>
<%//关闭mysql连接
try{
if(!mybbs.closeConn());
}catch(Exceptionex){
System.err.println("closeConn:"+ex.getMessage());
}
%>
算法参考:http://www.chinaasp.com/sqlbbs/showEssence.asp?id=4783