事务简介:
1. 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
2. 操作:
(1). 开启事务
(2). 提交事务
(3). 回滚事务
一、JDBC关于事务操作的API
使用Connection对象来管理事务
Connection接口中与事务有关的方法 | 说明 |
void setAutoCommit(boolean autoCommit) | 参数是true或false 如果设置为false,表示关闭自动提交,相当于开启事务 |
void commit() | 提交事务 |
void rollback() | 回滚事务 |
二、开发步骤
1)获取连接
2) 开启事务
3) 获取到PreparedStatement
4) 使用PreparedStatement执行两次更新操作
5) 正常情况下提交事务
6) 出现异常回滚事务
7) 最后关闭资源
三、示例
使用前面的数据库工具类进行案例演示
import com.net.lwgk.util.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Demo09JDBC {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pst1 = null;
PreparedStatement pst2 = null;
try {
//获取连接
conn = JDBCUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//定义sql
String sql1 = "update account set balance = balance + ? where id = 1";
String sql2 = "update account set balance = balance - ? where id = 2";
//获取执行sql对象
pst1 = conn.prepareStatement(sql1);
pst1.setDouble(1,500);
pst2 = conn.prepareStatement(sql2);
pst2.setDouble(1,500);
pst1.executeUpdate();
pst2.executeUpdate();
conn.commit();
} catch (Exception e) {//为了所有异常都执行,所以将异常设置为最高级
if (conn != null){
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
}finally {
JDBCUtils.close(pst1,conn);
JDBCUtils.close(pst2,null);
}
}
}