`
simpledev
  • 浏览: 194237 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

递归:删除中的循环递归说明

    博客分类:
  • Java
阅读更多
典型应用:收藏夹删除,文件夹删除,产品类别删除,站点类别删除等。
达到要求:在删除当前记录的时候,判断是否存在子级记录,如果存在也要级联删除,循环判断只到将该记录下的所有子级记录全部删除为止。
数据表设计特点:任何表的设计都以ID为标示列,如果设计上下级关系的表,那么存在一个parent_id(上级ID)列
数据表结构举例:
中国(00)
   湖南(00 01)
       长沙市(00 01 03)
   上海(00 02)
       浦东新区(00 02 04)
       闵行区(00 02 05)
             浦江镇(00 02 05 06)
说明:最后的两位数表示当前的记录ID,前面的数据表示该记录的全部上级关系。


下面是例子的部分说明:
第一步:创建数据库表
第二步:递归删除关键代码

1〉数据表设计:
create table tbl_typeNode(
id int not null primary key,
name varchar(20),
parent_id int not null
);

--默认第一级节点parent_id为0
--添加测试数据
insert into typeNode values
(1,'中国',0),
(2,'湖南',1),
(3,'上海',1),
(4,'浦东新区',3),
(5,'闵行区',3),
(6,'浦江镇',5),
(7,'长沙市',2);

--查询数据是否添加成功
select * from typeNode;

实现要求:如果将上海删除,必须将它下面的浦东新区,闵行区/浦江镇,全部都级联删除。
支持驱动:mysql-connector-java-3.0.17-ga-bin.jar

数据库连接字符串: com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/test
       root/

2〉递归删除代码如下:
public void deleteNode(String id) {
//查询全部的数据库中记录
List listTemp = typeNodeDao.listTypeNode();
for (int i = 0; i < listTemp.size(); i++) {
TypeNode typeNode= (TypeNode) listTemp.get(i);
//判断该ID下面是否存在下级ID
if (id.equals(typeNode.getParentId())) {
//如果条件成立,循环调用自身方法
deleteNode(typeNode.getId()); 
}
}
//删除记录
typeNodeDao.deleteTypeNode(id);
}
备注:
1.typeNodeDao是DAO,数据库操作对象,操作tbl_typeNode数据库表。
方法:listTypeNode:查询全部的类型节点数据
      deleteTypeNode:根据当前传入的ID删除该类型节点记录
2.TypeNode是tbl_typeNode数据表映射为JAVA封装MODEL对象,主要包括id,name,parentId成员变量。
分享到:
评论

相关推荐

    (java递归)删除文件

    java:用递归方法删除文件

    递归实现汉诺塔

    5、循环虽然比递归算法快,但比较而言,递归更容易让人理解! purpose: 1、培养独立思考算法的能力,特别是递归时,用到的是数学中的数列,找到整个递归的最先出栈的函数,以及数列的第n项与第n-1项的关系就能用...

    arecursion-js:没有最大深度的异步递归

    多亏了setImmediate函数,递归的下一次迭代被安排在事件循环的下一帧上。 当前迭代将返回,将函数从调用堆栈中删除。 整个递归都包装在一个Promise中,它将解决递归函数的结果 :package: 安装 $ yarn add ...

    php自定义函数之递归删除文件及目录

    复制代码 代码如下: /*—————————————————— */ //– 递归删除文件及目录 //– 例: del_dir (‘../cache/’);注意:返回的/是必须的 //– $type 强制删除目录, true 是 ,false 否 /*——————...

    Oracle9i的init.ora参数中文说明

    说明: 指定 make 实用程序 (如 UNIX 中的 make 或 gmake, 即 GNU make) 的完整路径名。要从生成的 C 源中生成共享对象或 DLL, 需要使用 make 实用程序。 值范围: make 实用程序的完整路径名。 默认值: 无 plsql_...

    LeetCode判断字符串是否循环-Data-Structures-and-Algorithms:记录学习数据结构与算法的笔记

    LeetCode判断字符串是否循环 Data-Structures-and-Algorithms ...递归: n叉树的遍历 数组迭代 题目: 322: 凑零钱(数组迭代/递归) 509: 斐波那契数列(迭代) 回溯算法 n叉树遍历 46: 全排列 51: n皇后 其他文章

    python根据字典的键来删除元素的方法

    python根据字典的键来删除元素的方法: 可以利用pop()方法来进行删除。 pop()方法可以删除字典定键key及对应的值,并返回被删除的值。 具体使用方法如:【site.pop(‘name’)】。 Python 字典 pop() 方法删除字典...

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    06-005二叉树的前序、中序和后序遍历的递归与非递归算法 06-006统计二叉树中叶子结点个数、按给定的先序序列建立二叉链表 06-007线索链表的建立与遍历 06-008树的存储结构、森林和二叉树的转换、树和森林的遍历 06-...

    leetcode中文版-daily_algorithm::fire:算法进阶,由浅入深,欢迎加入一起共勉(Adailyalgorithm,Welcome

    进阶文章(持续更新中...) 链表 : 使用单链表实现LRU : 单链表判断回文 : 单链表反转 : 链表中环的检测 : 两个有序链表的合并 : 删除链表倒数第 n 个结点 : 求链表的中间结点 栈 : 有效的括号 : 最小栈 : 基本的...

    数据结构实验

    1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。 2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置 i 上的人开始报数,数到 ...

    Matlab实现GRU门控循环单元时间序列预测未来(完整源码和数据)

    1.Matlab实现GRU门控循环单元时间序列预测未来; 2.运行环境Matlab2020及以上,data为数据集,单变量时间序列预测;...则删除Matlab中的main.m的全部代码,将文本文档中不乱码的代码复制到Matlab中的main.m中。

    《数据结构》实验

    2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。...

    单片机如何精简代码量以及提升运行速度技巧介绍.docx

    在单片机编程中,精简代码量和提升运行速度是优化嵌入式系统性能的关键考量因素。以下是一些针对单片机环境的有效策略: ### 精简代码量: 1. **避免冗余代码**: - 删除不必要的注释和空行。 - 合并重复的代码...

    java删除文件夹的代码

    使用java代码,删除文件夹或者文件。没有使用递归,而是使用循环的方式删除文件夹。利用了java.io.File类来进行文件夹的删除

    Linux指令一周通 (技术图书大系).azw3

    3.41 mrd指令:删除MS-DOS文件系统中的目录 3.42 pwd指令:显示工作目录 3.43 quota指令:显示磁盘已使用的空间与限制 3.44 quotacheck 指令:检查磁盘的使用空间与限制 3.45 quotaoff指令:关闭磁盘空间限制 3.46 ...

    MySQL存储过程完整版使用代码示例

    资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...

    实验4 数组(4学时)

    然后用索引变量j,对数组中的每一个元素进行循环。在每次内部循环中,将matrix[i][j]赋值为(i*j)。 通过循环打印matrix中的所有元素,结果为:           4、利用二维数组实现一个矩阵类:Matrix。要求提供...

    数据结构与算法教学大纲程序代码

    2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。...

    数据结构与算法.xmind

    递归拆分出两个有序的数组,从mid的位置开始拆分,递归出口:只有一个值的时候就不用拆分了 合并两个有序的数据 分别往两个数组填充已有序的数据 比较两个数组的值谁小,谁小就放到我们的...

Global site tag (gtag.js) - Google Analytics