JDBC事务
来源:互联网 发布:氰化钠 淘宝 编辑:程序博客网 时间:2024/06/05 02:02
Connection
void setAutoCommit(boolean autoCommit); 设置事务是否自动提交
如果设置为false,表示手动提交事务。
void commit() (); 手动提交事务
void rollback([sp]) ; 回滚(出现异常时候,所有已经执行成功的代码需要回退到事务开始前的状态。)
Savepoint setSavepoint(String name)
public class AccountDao { // 全局参数 private Connection con; private PreparedStatement pstmt; // 1. 转账,没有使用事务 public void trans1() { String sql_zs = "UPDATE account SET money=money-1000 WHERE accountName='张三';"; String sql_ls = "UPDATE account SET money=money+1000 WHERE accountName='李四';"; try { con = JdbcUtil.getConnection(); // 默认开启的隐士事务 con.setAutoCommit(true); /*** 第一次执行SQL ***/ pstmt = con.prepareStatement(sql_zs); pstmt.executeUpdate(); /*** 第二次执行SQL ***/ pstmt = con.prepareStatement(sql_ls); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.closeAll(con, pstmt, null); } } // 2. 转账,使用事务 public void trans2() { String sql_zs = "UPDATE account SET money=money-1000 WHERE accountName='张三';"; String sql_ls = "UPDATE1 account SET money=money+1000 WHERE accountName='李四';"; try { con = JdbcUtil.getConnection(); // 默认开启的隐士事务 // 一、设置事务为手动提交 con.setAutoCommit(false); /*** 第一次执行SQL ***/ pstmt = con.prepareStatement(sql_zs); pstmt.executeUpdate(); /*** 第二次执行SQL ***/ pstmt = con.prepareStatement(sql_ls); pstmt.executeUpdate(); } catch (Exception e) { try { // 二、 出现异常,需要回滚事务 con.rollback(); } catch (SQLException e1) { } e.printStackTrace(); } finally { try { // 三、所有的操作执行成功, 提交事务 con.commit(); JdbcUtil.closeAll(con, pstmt, null); } catch (SQLException e) { } } } // 3. 转账,使用事务, 回滚到指定的代码段 public void trans() { // 定义个标记 Savepoint sp = null; // 第一次转账 String sql_zs1 = "UPDATE account SET money=money-1000 WHERE accountName='张三';"; String sql_ls1 = "UPDATE account SET money=money+1000 WHERE accountName='李四';"; // 第二次转账 String sql_zs2 = "UPDATE account SET money=money-500 WHERE accountName='张三';"; String sql_ls2 = "UPDATE1 account SET money=money+500 WHERE accountName='李四';"; try { con = JdbcUtil.getConnection(); // 默认开启的隐士事务 con.setAutoCommit(false); // 设置事务手动提交 /*** 第一次转账 ***/ pstmt = con.prepareStatement(sql_zs1); pstmt.executeUpdate(); pstmt = con.prepareStatement(sql_ls1); pstmt.executeUpdate(); // 回滚到这个位置? sp = con.setSavepoint(); /*** 第二次转账 ***/ pstmt = con.prepareStatement(sql_zs2); pstmt.executeUpdate(); pstmt = con.prepareStatement(sql_ls2); pstmt.executeUpdate(); } catch (Exception e) { try { // 回滚 (回滚到指定的代码段) con.rollback(sp); } catch (SQLException e1) { } e.printStackTrace(); } finally { try { // 提交 con.commit(); } catch (SQLException e) { } JdbcUtil.closeAll(con, pstmt, null); } }}
阅读全文
0 0
- JDBC-事务
- jdbc事务
- JDBC事务
- JDBC事务
- JDBC事务
- jdbc事务
- jdbc事务
- jdbc事务
- JDBC事务
- JDBC事务
- jdbc 事务
- JDBC事务
- JDBC 事务
- jdbc事务
- jdbc事务
- JDBC事务
- JDBC事务
- JDBC事务
- 的发换个地方号发,的发光飞碟多少
- bzoj1033 [ZJOI2008]杀蚂蚁antbuster
- 畅通工程续
- Java 并发编程实战笔记1
- 求阶层(求1+2!+3!+...+20!的和)
- JDBC事务
- tomcat显示中文乱码
- 【PAT】【Advanced Level】1109. Group Photo (25)
- 初学者如何在Linux环境下安装与配置Hudson
- HDU6201 | 2017 ACM-ICPC 亚洲区(沈阳赛区)网络赛-H transaction transaction transaction
- redis详解(三)-- 面试题
- 1001 string string string
- Java后台面试题 总结(合集)(持续更新)
- kafka分布式消息队列使用(springboot和springmvc)