文章目录
事务定义
- 事务定义
- 操作步骤
- 示例代码
一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
操作步骤使用 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) {
// 定义sql
String 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);
}
}
}