JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
2017-07-07 17:04
627 查看
目录
1 Connection中的重用方法
2 JDBC事务管理经典案例
注意:事务的提交与回滚是通过Connection提供的方法来调用的;本质上事务还是依赖数据库的实现;Connection的方法实质上也是调用了数据库事务机制.
2.1 不使用事务控制的转账业务
缺点:如果转入成功,但是转入失败的话,会造成转出者余额减少,但是转入者余额不变
项目结构图
转账业务java源代码
1 Connection中的重用方法
2 JDBC事务管理经典案例
1 Connection类中常用的方法回顾
1.1 Statement createStatement() throws SQLException;
创建一个Statement实例(即:创建一个SQL执行对象)1.2 PreparedStatement prepareStatement(String sql) throws SQLException;
创建一个PreparedStatement对象(即:创建一个预编译SQL执行对象)1.3 void setAutoCommit(boolean autoCommit) throws SQLException;
设置事务的自动提交(false为关闭自动提交,true为启动自动提交)1.4 void commit() throws SQLException;
手动提交事务1.5 void rollback() throws SQLException;
手动回滚事务2 需要用到事务回滚的经典案例:银行转账案例
转出和转入是一个事务,如果转出成功但是转入失败的会就需要进行事务回滚,否则就出出现转出者余额减少但是转入者余额没有增加注意:事务的提交与回滚是通过Connection提供的方法来调用的;本质上事务还是依赖数据库的实现;Connection的方法实质上也是调用了数据库事务机制.
2.1 不使用事务控制的转账业务
缺点:如果转入成功,但是转入失败的话,会造成转出者余额减少,但是转入者余额不变
项目结构图
1 package cn.xiangxu.entity; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 import java.util.Scanner; 7 8 import cn.xiangxu.tools.DBUtil; 9 10 public class Test { 11 public static void main(String[] args) { 12 Scanner scanner = new Scanner(System.in); 13 System.out.println("请输入转出用户名:"); 14 String outName = scanner.nextLine(); 15 System.out.println("请输入需要转出的资金额度:"); 16 Double money = Double.parseDouble(scanner.nextLine()); 17 System.out.println("请输入转入用户名:"); 18 String inName = scanner.nextLine(); 19 System.out.println("转出账户为:" + outName + "转出金额为:" + money + "转入账户为:" + inName); 20 21 22 Connection conn = null; 23 try { 24 conn = DBUtil.getConnection(); // 实例化连接对象 25 26 DBUtil.tansBegin(); // 关闭自动提交事务功能 27 28 String sql = "UPDATE client " 29 + "SET account = account - ? " 30 + "WHERE name = ? "; 31 PreparedStatement ps = conn.prepareStatement(sql); 32 ps.setDouble(1, money); 33 ps.setString(2, outName); 34 Integer rs = ps.executeUpdate(); 35 if(rs > 0) { 36 System.out.println("转出成功"); 37 } else { 38 System.out.println("转出失败"); 39 return; // 转出失败跳出函数,不再执行下面的语句;但是finally中的语句还是会执行的,因为就算天塌下来finally中的语句都会执行 40 } 41 42 System.out.println("======分割线======="); 43 44 String sql_in = "UPDATE client " 45 + "SET account = account + ? " 46 + "WHERE name = ? "; 47 PreparedStatement ps_in = conn.prepareStatement(sql_in); 48 ps_in.setDouble(1, money); 49 ps_in.setString(2, inName); 50 Integer judge_in = ps_in.executeUpdate(); 51 if(judge_in > 0) { 52 System.out.println("转入成功"); 53 DBUtil.transCommit(); // 转出、转入都成功就提交事务 54 } else { 55 System.out.println("转入失败"); 56 DBUtil.transBack(); // 转出成功、转入失败就回滚事务 57 } 58 59 } catch (Exception e) { 60 // TODO Auto-generated catch block 61 try { 62 DBUtil.transBack();// 捕获到异常后也需要进行事务回滚 63 } catch (SQLException e1) { 64 // TODO Auto-generated catch block 65 e1.printStackTrace(); 66 } 67 e.printStackTrace(); 68 } finally { 69 System.out.println("我是finally中的语句哟"); 70 try { 71 DBUtil.closeConnection(); 72 } catch (Exception e) { 73 // TODO Auto-generated catch block 74 e.printStackTrace(); 75 } 76 } 77 } 78 }
转账业务java源代码
相关文章推荐
- 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。
- Connection中的方法实现事务管理
- 另外一个实现事务提交、回滚的方法
- 手工实现JDBC事务管理。
- 利用ScriptManager实现Javascript调用WebService中的方法
- 转 业务层中 被调用服务的遭遇事务回滚的处理 2方法
- 利用ASP实现事务处理的方法
- 利用ASP实现事务处理的方法(摘)
- 利用ASP实现事务处理的方法
- 利用Windows Group实现基于角色的WCF接口方法调用授权
- 利用ASP实现事务处理的方法
- 利用ASP实现事务处理的方法
- asp.net下利用JS实现对后台CS代码的调用方法
- 利用ASP实现事务处理的方法
- 利用ASP实现事务处理的方法
- 利用ASP实现事务处理的方法
- 利用sender的Parent获取GridView中的当前行 不用AJAX实现前台JS调用后台C#方法(小技巧) AjaxControlToolkit的CalendarExtender的本地化
- 利用ASP实现事务处理的方法-转
- [转载]利用webBrowser实现自动提交页面的方法