一个方法里面的多个sql语句怎么保证事务
时间: 2024-09-12 18:10:17 浏览: 28
在一个方法里如果包含多个SQL语句,并希望保持事务一致性,通常的做法是在数据库操作前后都包裹在`begin transaction`和`commit`,或者`rollback`语句之间。这是利用数据库管理系统(DBMS)的原子性(Atomicity)特性来确保所有操作要么全部完成,要么全部回滚。
以下是一个简单的例子:
```java
public void doMultipleSqlOperations() {
try {
// 开始事务
connection.beginTransaction();
String sql1 = "UPDATE table1 SET column1 = 'value1'";
String sql2 = "INSERT INTO table2 (column2) VALUES ('value2')";
PreparedStatement pstmt1 = connection.prepareStatement(sql1);
pstmt1.executeUpdate(); // 执行第一条SQL
pstmt2 = connection.prepareStatement(sql2);
pstmt2.executeUpdate(); // 执行第二条SQL
// 提交事务
connection.commit();
} catch (SQLException e) {
// 如果发生异常,回滚事务
connection.rollback();
log.error("Error occurred", e);
} finally {
// 关闭连接资源
connection.close();
}
}
```
在这个例子中,如果在`executeUpdate()`过程中发生错误,会触发`catch`块里的`rollback`,这将撤销对`table1`的更新以及尚未提交到`table2`的操作。如果没有异常,则会在`commit`后结束事务并保存更改。