JDBC控制事务
简述
事务就是一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败。
操作:开启事务、提交事务、回滚事务。
Connection对象管理事务
JDBC默认事务是自动提交的,我们需要使用connection对象的setAutoCommit(boolean )方法设置为false,即开启事务。使用commit方法来提交事务,使用rollback来回滚事务。
银行转账案例
package hjj.transaction; import hjj.util.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Main { public static void main(String[] args) { Connection connection = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { connection = JDBCUtils.getConnection(); //开启事务 connection.setAutoCommit(false); String sql1 = "update account set balance = balance - ? where id = ?"; String sql2 = "update account set balance = balance + ? where id = ?"; pstmt1 = connection.prepareStatement(sql1); pstmt2 = connection.prepareStatement(sql2); pstmt1.setInt(1,500); pstmt1.setInt(2,1); pstmt2.setInt(1,500); pstmt2.setInt(2,2); pstmt1.executeUpdate(); //若此处有异常 int i = 3/0; pstmt2.executeUpdate(); connection.commit(); } catch (Exception e) {//抓取所有异常 e.printStackTrace(); try { if(connection != null) connection.rollback();//若不为空就回滚 } catch (SQLException ex) { ex.printStackTrace(); } }finally { JDBCUtils.close(connection,pstmt1,null); JDBCUtils.close(connection,pstmt2,null); } } }
一点一点积累,一点一点蜕变!