數據庫例子
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 閱讀(508)
評論(1) 編輯 收藏