JDBC 事务处理

来源:互联网 发布:txt转mobi for mac 编辑:程序博客网 时间:2024/05/16 05:06

事务使指一组最小逻辑操作单元,里面有多个操作组成。 组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。
默认事务是自动提交的,一条语句开启一个事务,当运行两条语句出错后无法回滚。

/*** 关闭自动提交事务,改为手动提交回滚 */@Testpublic void test2() {    try {        con = JDBCUtil.getConnection();        con.setAutoCommit(false);   // 设置事务为手动提交        String sql_1 = "UPDATE account SET money=money-1000 WHERE id=1;";        pstmt  = con.prepareStatement(sql_1);        pstmt.executeUpdate();        String sql_2 = "UPDATE account SET mone1y=money+1000 WHERE id=2;";// 错误sql        pstmt  = con.prepareStatement(sql_2); // 出错出现异常        pstmt.executeUpdate();    } catch (Exception e) {        try {            // 回滚操作,默认回滚整个事务            con.rollback();        } catch (SQLException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        e.printStackTrace();    }finally{        try {            // 提交操作            con.commit();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            JDBCUtil.close(con, pstmt);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

回滚到指定位置,需要在指定位置设置保存点

sp = con.setSavepoint();

然后回滚时,回滚到指定位置

con.rollback(sp);
0 0
原创粉丝点击