在java jdbc中开启事务需要调用 connection 对象的 setautocommit(false) 方法,提交事务则调用 commit() 方法。具体做法是获取连接后先关闭自动提交,执行完一系列sql操作后手动提交,若发生异常则回滚。这样能确保一组操作的原子性。

setAutoCommit(false) 如何改变默认行为
该方法将连接的自动提交模式设为 false,使后续每条语句不再立即生效,而是等待显式提交。

commit() 与 rollback() 的执行时机
正常流程结束时调用 commit() 持久化更改,异常时调用 rollback() 撤销更改。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JdbcTransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "password";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
// 开启事务:关闭自动提交
conn.setAutoCommit(false);
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Alice");
pstmt.executeUpdate();
pstmt.setString(1, "Bob");
pstmt.executeUpdate();
// 提交事务
conn.commit();
System.out.println("Transaction committed successfully.");
pstmt.close();
} catch (Exception e) {
if (conn != null) {
try {
// 回滚事务
conn.rollback();
System.err.println("Transaction rolled back due to error.");
} catch (Exception ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
预期结果:控制台输出 "Transaction committed successfully.",数据库中新增两条记录。若抛出异常,则输出 "Transaction rolled back due to error.",数据库无变化。
基于程序中 conn.rollback() 调用的具体问题
当程序执行到 conn.rollback() 时,当前事务中所有未提交的更改将被撤销,连接恢复到事务开始前的状态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











