## JDBC控制事务
1、事务:一个包含多个步骤的业务操作。如果这个业务员操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
2、操作:
1、开启事务
2、提交事务
3、回滚事务
3、使用Connection对象来管理事务
* 开启事务:setAutoCommit(boolean autoCommit):使用该方法设置参数为false,即开启事务
* 在执行sql之前开启事务
* 提交事务:commit()
* 当所有sql都执行完提交事务
* 回滚事务:rollback()
* 在catch中回滚事务
package JDBC.demo04; import JDBC.Login.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /** * JDBC事务管理机制 */ public class JDBCCommit { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { conn = JDBCUtils.getConn(); String sql1 = "update account set counts = counts - ? where id = ?"; String sql2 = "update account set counts = counts + ? where id = ?"; conn.setAutoCommit(false); pstmt1 = conn.prepareStatement(sql1); pstmt2 = conn.prepareStatement(sql2); pstmt1.setInt(1, 10000); pstmt1.setInt(2, 1); pstmt2.setInt(1, 10000); pstmt2.setInt(2, 2); pstmt1.executeUpdate(); int i = 1 / 0; pstmt2.executeUpdate(); conn.commit(); } catch (Exception e) { try { if (conn != null) { conn.rollback(); } } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { JDBCUtils.colse(conn, pstmt1, null); JDBCUtils.colse(null, pstmt2, null); } } }
That which doesn't kill me makes me stronger!