事务
一.什么是事务?
就是执行一组sql指令,这组sql指令要么全部执行成功,只要有一个失败,则全部失败
二.事务的操作
注意:和事务操作相关的都是Connection 的方法
同一个事务需要同一个Connection实现类对象
流程:
开启事务:
con.setAutoCommit(false);//关闭自动提交
true 开启自动提交
提交事务
con.commit();
回滚事务
con.rollback();
转账小案例的分析:
2 try 3 { //开启事务:之后系统会将以下所有的sql的执行当做一个整体 4 int i = update:-100 5 int j = update:+100 6 if(i > 0 && j > 0){ 7 //提交事务:当所有的sql指令都执行成功之后,提交事务-> 所有对数据库的操作将永久生效,不可更改 8 System.out.println("转账成功!"); 9 } 10 }catch (Exception e) 11 { 12 //回滚事务:当你的事务中出现问题,没有全部执行执行成功,则回顾事务,这样之前对数据库的所有操作就被撤销 13 }
代码demo:
1 public class Demo { 2 public static void main(String[] args){ 3 Connection con=null; 4 try{ 5 QueryRunner qr = new QueryRunner(); 6 con=C3P0Utils.getConnection(); 7 //开启事务 8 con.setAutoCommit(false); 9 int re1 = qr.update("update account set money=money-? where id=?",300,342); 10 int re2 = qr.update("update account set money=money+? where id=?",300,345); 11 if(re1>0&&re2>0){ 12 //都执行成功提交事务 13 con.commit(); 14 }else{ 15 //执行失败手动回滚事务 16 con.rollback(); 17 } 18 }catch(Exception e){ 19 //发生异常回滚事务 20 try { 21 con.rollback(); 22 } catch (SQLException e1) { 23 // TODO Auto-generated catch block 24 e1.printStackTrace(); 25 } 26 }finally { 27 try { 28 //将连接放回连接池 29 con.close(); 30 } catch (SQLException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 } 35 } 36 }