JDBC简单处理sql事务

tech2022-08-06  135

import cn.itcast.utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 事务操作 */ public class JDBCDemo10 { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { /* 1.获取连接(手写工具类JDBCUtils以及设置配置文件,具体实现方式请看往期文章: https://blog.csdn.net/weixin_45802810/article/details/108369979) */ conn = JDBCUtils.getConnection(); //开启事务 conn.setAutoCommit(false); //2.定义sql //2.1 张三账户 - 500 String sql1 = "update account set balance = balance - ? where id = ?"; //2.2 李四账户 + 500 String sql2 = "update account set balance = balance + ? where id = ?"; //3.获取执行sql对象 pstmt1 = conn.prepareStatement(sql1); pstmt2 = conn.prepareStatement(sql2); //4. 设置参数 pstmt1.setDouble(1,500); pstmt1.setInt(2,1); pstmt2.setDouble(1,500); pstmt2.setInt(2,2); //5.执行sql pstmt1.executeUpdate(); /* 手动制造异常: 一旦发生异常下面的代码就不会执行了,这样的话就容易出现一方数据更改了, 但是另一方的数据却不会跟着更改,这样的话钱就对不上了。 所以一出现问题就感觉回滚,让数据回到初始状态。 */ int i = 3/0; pstmt2.executeUpdate(); //提交事务 conn.commit(); } catch (Exception e) { //事务回滚 try { if(conn != null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { //手写工具类JDBCUtils JDBCUtils.close(pstmt1,conn); JDBCUtils.close(pstmt2,null); } } }
最新回复(0)