zoukankan      html  css  js  c++  java
  • 利用递归级联删除的代码

    级联树状结构,删除的时候,需要一级一级查找,并一级级删除操作,如此反复操作,需要不断调用同一个函数,所以这里使用递归操作十分方便

    递归函数需要单独书写,并在方法中调用。

    以下示例代码,为一个级联删除,有个父id 然后不断查找其子id 并删除 通过子id 继续查找其id的子id 删除,由于多语句操作,所以使用了事物手动提交方式

    (其中处理异常方式不严谨!!)

    /**
         * 级联删除的递归函数
         * @param conn 调用者需要将其连接对象传入,方便事物操作
         * @param id 将删除的父id传入
         * @throws Exception
         */
        public void doDel(Connection conn,int id) throws Exception{
        	
        	//查找id进行删除操作
        	String sql = "delete from address where id = ?";
    		PreparedStatement ps = conn.prepareStatement(sql);
    		ps.setInt(1, id);
    		ps.executeUpdate();
        	
    		//将此id作为父id查找其子id(级联子)
        	sql = "select id from address where parentId = ?";
    		ps = conn.prepareStatement(sql);
    		ps.setInt(1, id);
    		ResultSet rs = ps.executeQuery();
    		//此条件没有数据时可结束递归,然后不断跳出,结束循环
    		while(rs.next()){
    			//这里通过传入其子ID 再不断查找其子孙id进行删除和查询删除往复操作
    			this.doDel(conn,rs.getInt("id"));
    		}
    		//rs ps每次递归函数调用时新创建,所以用完关闭
    		//对于Connection是调用函数传入,不能关闭,要使用此连接提交和回滚事务
    		rs.close();
    		ps.close();
        }
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.setContentType("text/html;charset=utf-8");
    		response.setCharacterEncoding("utf-8");
    		ProxyDAO proxy = new ProxyDAO();
    		int id = Integer.parseInt(request.getParameter("Id"));
    		Connection conn = proxy.getConn();
    		try{
    			//这里由于是多语句操作,考虑异常问题,需要设置手动提交
    			conn.setAutoCommit(false);
    			//调用递归函数,并传入当前连接与当前id
    			this.doDel(conn, id);
    			//如果正常运行无异常,此方法会被调用,提交事务
    			conn.commit();
    		}catch(Exception ex){
    			try {
    				//如果出现异常,事物回滚
    				conn.rollback();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			ex.printStackTrace();
    		}
    			//业务处理完毕,进行其他操作.....
    		
    					
    	}
    

      

  • 相关阅读:
    了解Boost神器
    官方教程避坑:编译ARM NN/Tensorflow Lite
    信号量 PV 操作
    MAC 读写 ntfs 格式的硬盘
    poj题目分类
    Gelfond 的恒等式
    那些scp里的烂梗
    b
    jmeter集合
    Jmeter文章索引贴
  • 原文地址:https://www.cnblogs.com/whytohow/p/5062644.html
Copyright © 2011-2022 走看看