Mysql事物回滚
2013-09-28 11:28
204 查看
1、事物是由一系列操作组成的一个逻辑工作单元
2、事物提交类型:
自动提交:执行一个保存一个数据
手动提交:先放入缓存,只有执行commit才能够保存到数据库中。在事物执行结束之后再提交,如果在事物执行期间发生错误,则回滚(rollback)到事物的开始
设置事物回滚步骤:(在dao中写事物回滚)
①设置事物提交类型为手动提交:auto=false;
②在执行所有sql语句之后再将数据保存到数据库中
③如果出了异常就将事物进行回滚
connection
conn.setAutoCommit(false) //提交方式,在第一个获得连接之后
conn.commit(); //提交,在所有操作执行之后
conn.rollback(); //事物回滚,数据回到原始状态。功能:清空缓存。在捕获异常的地方
案例如:银行中有存款,将存款和余额分开,则存一次款,余额就会改变,从而需要用到事物回滚
2、事物提交类型:
自动提交:执行一个保存一个数据
手动提交:先放入缓存,只有执行commit才能够保存到数据库中。在事物执行结束之后再提交,如果在事物执行期间发生错误,则回滚(rollback)到事物的开始
设置事物回滚步骤:(在dao中写事物回滚)
①设置事物提交类型为手动提交:auto=false;
②在执行所有sql语句之后再将数据保存到数据库中
③如果出了异常就将事物进行回滚
connection
conn.setAutoCommit(false) //提交方式,在第一个获得连接之后
conn.commit(); //提交,在所有操作执行之后
conn.rollback(); //事物回滚,数据回到原始状态。功能:清空缓存。在捕获异常的地方
案例如:银行中有存款,将存款和余额分开,则存一次款,余额就会改变,从而需要用到事物回滚
@Test public void testSaveMoney() { Connection conn = null; PreparedStatement pstmt = null; // 准备数据 String accountId = "123456789"; double money = 100; try { conn = JDBCUtils.getConnection(); /*****************************************************/ //设置事务为手动提交 System.out.println("默认事务为"+conn.getAutoCommit());//true代表自动提交,false手动提交 conn.setAutoCommit(false); System.out.println("事务为"+conn.getAutoCommit()); /*****************************************************/ // 向inaccount表中插入一条记录 // sql: INSERT INTO inaccount(accountid,inbalance) // VALUES('123456789',100) String sql = "INSERT INTO inaccount(accountid,inbalance) VALUES(?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, accountId); pstmt.setDouble(2, money); pstmt.executeUpdate();//数据马上同步到数据库 // 更新account表,将指定账号的余额加上100 // UPDATE account SET balance=balance+100 WHERE // accountid='123456789' sql = "UPDATE account SET balance=balance+? WHERE accountid=?"; pstmt = conn.prepareStatement(sql); pstmt.setDouble(1, money); pstmt.setString(2, accountId); //模拟因网络或不明原因出异常 boolean flag = true; if(flag) { throw new SQLException("因网络或不明原因出异常!"); } pstmt.executeUpdate(); /*****************************************************/ //提交事务 conn.commit(); /*****************************************************/ } catch (SQLException e) { /*****************************************************/ //回滚事务 try { if(conn!=null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } /*****************************************************/ e.printStackTrace(); } finally { JDBCUtils.closeResource(conn, pstmt, null); } }
相关文章推荐
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- mysql引擎从MYSIAM型修改成INNODB类型后事物回滚无效
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- 关于MYSQL调用事物回滚的整理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- Spring+hibernate+mysql事物不回滚的原因以及处理
- MySQL事物提交与回滚
- Spring+hibernate+mysql事物不回滚的原因以及处理