数据库例子
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
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);
------------------------------------------------------------------------------------------------------------------------------
下面是用递归列出树状结构:
import java.sql.*;




public class ArticleTree
{


public static void main(String[] args)
{
ArticleTree at = new ArticleTree();
at.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=********");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from article where pid = 0");

while (rs.next())
{
System.out.println(rs.getString("cont"));
tree(conn, rs.getInt("id"),1);
}

}catch(SQLException e)
{
e.printStackTrace();

}catch(ClassNotFoundException 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 tree(Connection conn,int id, int level)
{
Statement stmt = null;
ResultSet rs = null;
StringBuffer strPre = new StringBuffer("");

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

try
{
stmt = conn.createStatement();
String sql = "select * from article where pid =" + id;
rs = stmt.executeQuery(sql);

while(rs.next())
{
System.out.println(strPre + rs.getString("cont"));

if(rs.getInt("isleaf")!=0)
{
tree(conn , rs.getInt("id") , level+1);
}
}

}catch(SQLException e)
{
e.printStackTrace();

}finally
{

try
{

if (rs!=null)
{
rs.close();
rs = null;
}

if (stmt!=null)
{
stmt.close();
stmt = null;
}

}catch(SQLException e)
{
e.printStackTrace();
}
}
}

}

输出结果:
--------------------------------------------------------------------------
蚂蚁大战大象
大象被打趴下了
蚂蚁也不好过
瞎说
没有瞎说
大象进医院了
护士是蚂蚁
怎么可能
怎么没有可能
可能性是很大的
--------------------------------------------------------------------------
复习以下递归,这个东西如果不熟练,自己写起来是很麻烦的事情。脑子里老转不过弯。
posted on 2009-04-06 01:42
shivaree 阅读(505)
评论(1) 编辑 收藏