根據資料庫中取記錄自定義一棵樹結構 (轉)
在/開發中,我們可能也會涉及到樹結構的定義問題,比如從中取出記錄並定義一個樹用於論壇結構的顯示等。
因為是servlet,使用 中提供的JTree並不現實。
其實一棵實現基本功能的樹並不複雜,所以我們自已動手。
首先,在資料庫的結構一般是這樣的幾個欄位不能少:
int id 節點id
int pid 父節點id
String title 顯示字串
......
(其實前兩個節點維持著樹的結構是最重要的,後面你想怎麼加都行了......)
然後我們來定義一個樹節點類,程式碼如下:
/**
* 自定義的樹結點
* @author:sharetop(to:sharetop@.com">sharetop@hotmail.com)
*/
import java.util.*;
class CTreeNode
{
int id; /*點ID號,對應資料庫相應欄位*/
String title=null;
String href=null;
CTreeNode parent=null; /*父節點*/
Vector allChild; /*儲存了全部子節點*/
/**
*構造
*/
CTreeNode()
{
allChild=new Vector();
}
/**
*加子節點
*/
void addChild(CTreeNode child)
{
allChild.add(child);
}
/**
* 根據ID遞迴查詢子節點,返回節點物件
*/
CTreeNode findChild(int id)
{
if( id==this.id ) return this;
for( Enumeration e = allChild.elements();e.hasMoreElements();)
{
CTreeNode temp = (CTreeNode)e.nextElement();
if( temp.id==id ) return temp;
CTreeNode tmp = temp.findChild(id);
if( tmp!=null )return tmp;
}
return null;
}
/**
* 生成一個XML字串
*/
String create()
{
StringBuffer result= new StringBuffer();
result.append("
result.append("" href="");
result.append(href);
result.append("" >");
if( allChild.size()!=0 ){
for( Enumeration e = allChild.elements();e.hasMoreElements();) {
CTreeNode temp = (CTreeNode)e.nextElement();
result.append(temp.create());
}
}
result.append("
return result.toString();
}
}
好了,然後就是我們在servlet中如何使用這個類了:
在我們的TestServlet.java中加一個方法:
private String getXMLResult()
{
StringBuffer result = new StringBuffer();
/*這裡是樹根*/
CTreeNode = new CTreeNode();
root.id=0;
root.title="根目錄";
root.href="";
try{
Connection con = pool.getConnection();
PreparedStatement ps = con.prepareStatement(" * from block order by id");
ResultSet rs = ps.executeQuery();
while( rs.next() ){
/*每一條記錄對應一個節點,關鍵是找到它在樹上所處的位置*/
CTreeNode node = new CTreeNode();
node.id=rs.getInt("id");
node.title=rs.getString("title");
node.parent=root.findChild(rs.getInt("pid"));
node.href=node.title+".html";
node.parent.addChild(node);
}
rs.close();
ps.close();
con.close();
dbpool.freeConnection(con);
}
catch( Exception ex )
{
System.err.println("Error in Update - Bean : rn");
ex.printStackTrace(System.err);
return "";
}
return root.create();
}
就是這麼簡單,TestServlet的doGet方法我也給在下面吧
public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException
{
resp.setContentType("text/xml;charset=gb2312");
PrintWriter out = resp.getWriter();
out.println("");
out.println(getResult());
out.flush();
out.close();
}
有興趣可以測試一下。
這只是一個基本的樹結構,如果要讓它符合你的要求,你需要對它進行擴充,歡迎與我討論
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991415/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi中根據分類資料生成樹形結構的最優方法 (轉)
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- 如何在資料庫中儲存一棵樹資料庫
- VS中根據實體生成資料庫資料庫
- (樹)根據中序後序構建二叉樹二叉樹
- 自定義響應資料結構資料結構
- 根據一個輸入資料構造二叉樹和連結串列資料結構的方法(c++)二叉樹資料結構C++
- MySQL自定義函式 根據一級部門查詢所有子部門 記錄貼MySql函式
- 在VC++中建立自定義資料庫類 (轉)C++資料庫
- (樹)根據排序陣列或者排序連結串列重新構建BST樹排序陣列
- 資料結構中樹形結構簡介資料結構
- 樹型結構資料在資料庫基本表中的儲存及維護 (轉)資料庫
- 資料庫資料變成樹型結構資料庫
- map自定義排序,根據鍵或者值排隊排序
- 資料結構 AVL樹和紅黑樹的定義資料結構
- 利用VC++獲取異構型資料庫庫結構資訊 (轉)C++資料庫
- nginx自定義負載均衡及根據cpu執行自定義負載均衡Nginx負載
- 【資料結構】根據主定理,計算時間複雜度資料結構時間複雜度
- 在資料庫中自定義外部函式資料庫函式
- mysql資料目錄結構(轉)MySql
- JavaScript中的樹型資料結構JavaScript資料結構
- 資料結構——樹資料結構
- 資料結構-樹資料結構
- 資料結構筆記——二叉樹的定義和性質資料結構筆記二叉樹
- 資料庫結構操作 (轉)資料庫
- 關於資料庫取表的前N條記錄 (轉)資料庫
- 資料結構:樹和二叉樹定義和術語資料結構二叉樹
- EF3.1 根據資料庫生成程式碼資料庫
- 根據連線的資料庫判斷資料庫型別(JAVA)資料庫型別Java
- [資料結構] 樹、二叉樹、森林的轉換資料結構二叉樹
- 資料結構學習(C++)——樹(總結) (轉)資料結構C++
- 物料主記錄的資料結構資料結構
- 深入RxEasyHttp網路庫教你3分鐘學會自定義資料結構HTTP資料結構
- 幾千萬記錄,資料庫表結構如何平滑變更?資料庫
- MSSQL遍歷資料庫根據列值查詢資料SQL資料庫
- 資料結構-字典樹資料結構
- 資料結構之「樹」資料結構
- 資料結構 - AVL 樹資料結構