快速生成目录树(Oracle)
2005-12-23 11:42
295 查看
原来我生成目录树的方法是把表中的数据按某个条件读出来,然后在程序中通过递归生成目录树,如果节点超过1000个,速度会非常慢。最近找到一个好的方法:
假如目录树的表结构如下:
ID ID
父ID PID
节点名称 Text
第一步:查询数据。查询数据时,要使用Oracle自己的递归,语法如下:
SELECT ID,PID,TEXT FROM TABLETREE START WITH ID='0' CONNECT BY PID=PRIOR ID
如果有其它的条件可以在最后加上Where条件,递归的起始条件(Start With)可以有多个用And连接,如:(ID='0' And Text='aaa') 递归的条件也可以是多个,条件之间也用And连接。
用Oracle递归的特点是:查询的结果完全按照树节点从上到下的顺序排列。这样我们可以只遍历一次就能生成目录树了。
第二步:生成树目录。假设查询结构放在名字为table的DataTable里。
TreeNode parentNode = new TreeNode();
DataRow row = table.Rows[0];
TreeNode node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
_mainTree.Nodes.Add(node);
parentNode = node;
if(table.Rows.Count>0)
{
for(int i=1;i<table.Rows.Count;i++)
{
row = table.Rows[i];
string strPID = row["PID"].ToString();
node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
while(strPID != parentNode.Tag.ToString())
{
parentNode = parentNode.Parent;
}
parentnode.Nodes.Add(node);
parentnode = node;
}
}
假如目录树的表结构如下:
ID ID
父ID PID
节点名称 Text
第一步:查询数据。查询数据时,要使用Oracle自己的递归,语法如下:
SELECT ID,PID,TEXT FROM TABLETREE START WITH ID='0' CONNECT BY PID=PRIOR ID
如果有其它的条件可以在最后加上Where条件,递归的起始条件(Start With)可以有多个用And连接,如:(ID='0' And Text='aaa') 递归的条件也可以是多个,条件之间也用And连接。
用Oracle递归的特点是:查询的结果完全按照树节点从上到下的顺序排列。这样我们可以只遍历一次就能生成目录树了。
第二步:生成树目录。假设查询结构放在名字为table的DataTable里。
TreeNode parentNode = new TreeNode();
DataRow row = table.Rows[0];
TreeNode node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
_mainTree.Nodes.Add(node);
parentNode = node;
if(table.Rows.Count>0)
{
for(int i=1;i<table.Rows.Count;i++)
{
row = table.Rows[i];
string strPID = row["PID"].ToString();
node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
while(strPID != parentNode.Tag.ToString())
{
parentNode = parentNode.Parent;
}
parentnode.Nodes.Add(node);
parentnode = node;
}
}
相关文章推荐
- 【转】Oracle中如何用一条SQL快速生成10万条测试数据
- 快速查找当前所用oracle的目录
- Oracle中如何用一条SQL快速生成10万条测试数据
- linux系统下快速切换到oracle目录下
- Oracle中如何用一条SQL快速生成10万条测试数据
- 简单两步快速学会使用Mybatis-Generator自动生成entity实体、dao接口和简单mapper映射(用mysql和oracle举例)
- Oracle中如何用一条SQL快速生成10万条测试数据
- [Oracle]快速生成大量模拟数据的方法
- Oracle中如何用一条SQL快速生成10万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- 怎样快速生成模块目录?
- 快速生成Github README.md的目录
- Oracle dbms_random函数用法快速生成多条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- PHP 快速生成目录树
- oracle快速生成一百万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据(转)