- 概念
事务是指一个包含多个步骤的业务操作,若这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败
操作:1.开启事务2.提交事务3.回滚事务
使用Connection对象来管理事务
开启:void setAutoCommit(boolean autoCommit) : 将此连接的自动提交模式设置为给定状态,参数false为开启事务。
提交:void commit() : 使自上次提交/回滚以来所做的所有更改都将永久性,并释放此 Connection对象当前持有的任何数据库锁。
回滚:void rollback() : 撤消在当前事务中所做的所有更改,并释放此 Connection对象当前持有的任何数据库锁。 - 案例
package MyJdbc;
import Utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCDemo3 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt1=null;
PreparedStatement pstmt2=null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
String sql1 = "update grade set MATH = MATH+? where ID=?";
String sql2 = "update grade set MATH = MATH-? where ID=?";
pstmt1=conn.prepareStatement(sql1);
pstmt2=conn.prepareStatement(sql2);
pstmt1.setInt(1,2);
pstmt1.setString(2,"001");
pstmt2.setInt(1,2);
pstmt2.setString(2,"002");
pstmt1.executeUpdate();
int a=3/0;
pstmt2.executeUpdate();
conn.commit();
} catch (SQLException throwables) {
try {
if (conn!=null) conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
}finally {
JDBCUtils.close(rs,pstmt1,conn);
JDBCUtils.close(rs,pstmt2,conn);
}
}
}