JDBC事务管理
1. 概述
事务是包含多个操作的业务,如果这个业务被事务管理,则这多个操作要么全部被执行,要么全不执行。具体原理详见《SQL:事务》
2. 管理事务
- 开启事务
执行SQL之前需要开启事务,建议获取连接后就将事务开启。 - 提交事务
当所有SQL完成无错后,立即提交事务,防止意外导致回滚。 - 回滚事务
在有错误抛出异常的时候回滚事务。
注意:- 由于可能面对各种各样的错误导致操作异常,建议将 catch 中的异常范围设置为 Exception 。
- 由于可能是没有获取连接就抛出异常请求回滚事务,回滚事务前需要判断是否已获得连接,获得连接的事务才可以回滚。
- 如果事务提交以后,再次捕捉到了错误导致的回滚操作,并不影响最近事务提交后的数据。
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); } }