递归在数据库与程序中的应用

        首先说说数据库中的递归表,就用地区表做例子:

地区ID名称地区ID_F
1广东0
2广西0
3广州1
4天河3

这样的表其实就是一张递归表,通过观察地区ID与地区ID_F的关系可以看出如下递归:广东->广州->天河,广西,顶级节点有两个,就是广东和广西。

当我们在程序中选择地区时,点击广东,然后就出现广东下面各个市,点击了某一个市,就显示该市下面的所以地区。还可以在找不到想要的地点时,相应地添加地点。

这要怎么做呢?首先说绑定数据,绑定数据其实就是查找,我们只需要写一个方法,大致结构如下(以C#为例,具体实现代码忽略>.<):

void bindingNode(int ID_f)

{

        //以ID_f为条件,从数据库查找所有地区ID_F的值为ID_f的数据,放到表tb里

        //TODO:......

        for(int i=0;i<tb.rows.count;i++)

        {

                  //绑定数据

                  //TODO:......

                  int childNode_IDf = Convert.ToInt32(tb.rows[i]["地区ID"].ToString());

                  bindingNode(childNode_IDf);//调用自身,实现递归

        }

}

当我们需要绑定数据的时候,只需要调用方法bindingNode(0),这样就可以把整个表的数据提取出来,绑定到相应的控件,例如树形控件上面了。。。。

删除的话就在上面调用自身的方法下面调用删除的方法,像这样:

void deleteNode(int ID_f)

{

        //以ID_f为条件,从数据库查找所有地区ID_F的值为ID_f的数据,放到表tb里

        //TODO:......

        for(int i=0;i<tb.rows.count;i++)

        {

                 //绑定数据

                  //TODO:......

                  int childNode_IDf = Convert.ToInt32(tb.rows[i]["地区ID"].ToString());

                  deleteNode(childNode_IDf);//调用自身,实现递归

        }

        //调用删除方法,删除地区ID为ID_f的数据

        //deleteRow(ID_f)

}

修改就简单啦,直接获取当前选中项的ID,然后想怎么修改就怎么修改吧~新增的话就涉及到两种,一种是增加同级节点,一种是增加子级节点,看你新增回数据库时ID_F怎么选择了。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值