数据库例子
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 阅读(504)
评论(1) 编辑 收藏