JavaWeb5.6【JDBC:JDBC控制事务、转账案例】
2021/6/25 20:27:18
本文主要是介绍JavaWeb5.6【JDBC:JDBC控制事务、转账案例】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 package com.yub4by.jdbc; 2 3 /* 4 JDBC控制事务 5 6 1. 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。 7 2. 操作: 8 1. 开启事务 9 2. 提交事务 10 3. 回滚事务 11 3. 使用Connection对象来管理事务 12 * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务 13 * 在执行sql之前开启事务 14 * 提交事务:commit() 15 * 当所有sql都执行完提交事务 16 * 回滚事务:rollback() 17 * 在catch中回滚事务 18 */ 19 20 import com.yub4by.util.JDBCUtils; 21 22 import java.sql.Connection; 23 import java.sql.PreparedStatement; 24 import java.sql.SQLException; 25 26 /** 27 * 案例-转账 28 */ 29 public class JDBCDemo10 { 30 public static void main(String[] args) { 31 Connection conn = null; 32 PreparedStatement pstmt1 = null; 33 PreparedStatement pstmt2 = null; 34 35 try { 36 conn = JDBCUtils.getConnection(); 37 //开启事务 38 conn.setAutoCommit(false); 39 40 String sql1 = "update account set balance = balance - ? where id = ?"; 41 String sql2 = "update account set balance = balance + ? where id = ?"; 42 pstmt1 = conn.prepareStatement(sql1); 43 pstmt2 = conn.prepareStatement(sql2); 44 45 pstmt1.setDouble(1, 500); 46 pstmt1.setInt(2, 1); 47 pstmt2.setDouble(1, 500); 48 pstmt2.setInt(2, 2); 49 50 pstmt1.executeUpdate(); 51 // --------------------------- 52 // 手动制造异常 53 // int i = 3/0; //java.lang.ArithmeticException: / by zero 54 // --------------------------- 55 pstmt2.executeUpdate(); 56 57 //提交事务(执行到此,没有出现异常,就提交) 58 conn.commit(); 59 60 } catch (Exception e) { //注意因为只要出异常就会回滚,所以可能发生各种异常,故SQLException --> Exception 61 //事务回滚 62 try { 63 if (conn != null){ 64 conn.rollback(); 65 } 66 } catch (SQLException e1) { 67 e1.printStackTrace(); 68 } 69 70 e.printStackTrace(); 71 } finally { 72 JDBCUtils.close(pstmt1, conn); 73 JDBCUtils.close(pstmt2, null); 74 } 75 } 76 }
这篇关于JavaWeb5.6【JDBC:JDBC控制事务、转账案例】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?