JSP操作数据库的事务回滚

基础介绍

1.先设置为手动提交

conn.setAutoCommit(false); //将自动提交设置为false 

2.若成功则提交

conn.commit(); //当操作成功后手动提交 

3.若失败则回滚

conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功

代码演示

注:由于各种写法,文件结构等都各不相同,此处仅供参考。

1.演示删除主表,外键,文件,同时成功,失败返回。

2.因为文件删除了,撤回很麻烦,所以选择最后删除文件,删除文件成功在提交。

3.注意别忘了异常时回滚,以及关闭数据库的调用。


Map rtmap = new HashMap();

try {

        conn.setAutoCommit(false);  //将自动提交设置为false 

        sql = "delete from xxx where xiaozu_id=?";

        pstmt = conn.prepareStatement(sql);

        pstmt.setString(1, xxx);

        int ok = pstmt.executeUpdate();

        if (ok > 0) {

            sql = "delete from xxx where id=?";

            pstmt = conn.prepareStatement(sql);

            pstmt.setString(1, xxx);

            int insert_rs = pstmt.executeUpdate();

            if (insert_rs > 0) {

                //删除---文件

                 if (new File(fileName).delete()) {

                        rtmap.put("msg", "success");

                        conn.commit();      //当两个操作成功后手动提交 

                    } else {

                        rtmap.put("msg", "删除文件失败");

                        conn.rollback();    //一旦其中一个操作出错都将回滚,使两个操作都不成功 

                    }

            } else {

                rtmap.put("msg", "删除xx失败");

            }

            conn.commit();      //当两个操作成功后手动提交 

        } else {

            rtmap.put("msg", "删除图片失败");

        }

    } catch (Exception ex) {

        conn.rollback();    //一旦其中一个操作出错都将回滚,使两个操作都不成功 

        rtmap.put("msg", "java程序GG了!");

        ex.printStackTrace();

    } finally {

        out.println(JSON.toJSON(rtmap));

        if (rs != null) {

            rs.close();

        }

        if (pstmt != null) {

            pstmt.close();

        }

        if (conn != null) {

            conn.close();

        }

    }

你可能感兴趣的:(JSP操作数据库的事务回滚)