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);
}
}
}
JDBC简单处理sql事务
最新推荐文章于 2022-03-25 13:44:05 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)