文章目录
- 事务定义
- 操作步骤
- 示例代码
事务定义
一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
操作步骤
使用 Connection
对象来管理事务。
1.开启事务
2.提交事务
3.回滚事务
开启事务: setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
在执行 SQL 语句前开启事务
提交事务: commit()
当所有 SQL 执行完后提交事务
回滚事务: rollback()
出现异常后回滚事务,即在 catch 中回滚事务
示例代码
package priv.lwx.javaex.jdbc;import priv.lwx.javaex.jdbc.util.ConnectionUtils2;import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;/*** description** @author liaowenxiong* @date 2021/11/17 17:52*/public class JDBCDemo12 {public static void main(String[] args) {// 定义sqlString sql1 = "update account set balance = balance - ? where id = ?";String sql2 = "update account set balance = balance + ? where id = ?";// 获取连接对象Connection conn = ConnectionUtils2.getConnection();PreparedStatement pstmp1 = null;PreparedStatement pstmp2 = null;try {// 开启事务conn.setAutoCommit(false);// 获取预编译语句对象pstmp1 = conn.prepareStatement(sql1);pstmp2 = conn.prepareStatement(sql2);// 给sql语句的参数赋值pstmp1.setBigDecimal(1, BigDecimal.valueOf(500));pstmp1.setInt(2, 1);pstmp2.setBigDecimal(1, BigDecimal.valueOf(500));pstmp2.setInt(2, 2);// 执行SQL语句pstmp1.executeUpdate();// int i = 1/0;pstmp2.executeUpdate();// 提交事务conn.commit();} catch (SQLException e) {// 有异常回滚事务try {conn.rollback();} catch (SQLException throwables) {throwables.printStackTrace();}e.printStackTrace();} finally {ConnectionUtils2.close(conn, pstmp1, pstmp2);}}
}