1. 概述
事务是包含多个操作的业务,如果这个业务被事务管理,则这多个操作要么全部被执行,要么全不执行。
具体原理详见我的SQL系列文章"事务":https://www.cnblogs.com/NyanKoSenSei/p/11498978.html
2. 管理事务
(1) 开启事务
执行SQL之前需要开启事务,建议获取连接后就将事务开启。
(2) 提交事务
当所有SQL完成无错后,立即提交事务,防止意外导致回滚。
(3) 回滚事务
在有错误抛出异常的时候回滚事务。
注意:
1) 由于可能面对各种各样的错误导致操作异常,建议将 catch 中的异常范围设置为 Exception 。
2) 由于可能是没有获取连接就抛出异常请求回滚事务,回滚事务前需要判断是否已获得连接,获得连接的事务才可以回滚。
3) 如果事务提交以后,再次捕捉到了错误导致的回滚操作,并不影响最近事务提交后的数据。
例子
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 获取连接
conn = JDBCUtils.getConnection();
// 开启事务
conn.setAutoCommit(false);
// 编写SQL
String sql = "SQL语句";
// 获取执行SQL对象
pstmt = conn.prepareStatement(sql);
// 执行SQL
pstmt.executeUpdate();
// 提交事务
conn.commit();
} catch (Exception e) {
// 事务回滚
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
// 抛出异常
e.printStackTrace();
} finally {
// 释放资源
JDBCUtils.close(pstmt, conn);
}
}