标签:except 存储 close 错误 建立 操作 res stack void
1.概述:事务指的是逻辑上的一组操作,组成这组操作的单元,要不同时成功,要不同时失败
2.作用:保证在一个事务中,多次SQL操作要么同时成功,要么同时失败
*事务管理流程
1.开启事务
2.执行多条SQL语句,如果没有出现错误,提交事务,将数据持久化存储到数据库
3.执行多条SQL语句,如果出现错误,回滚事务,将事务状态回滚到开启事务之前
4.关闭资源
*JDBC事务操作
与事务操作相关的方法,都定义在java.sql.Connection接口中
public void setAutoCommit(boolean flag):将此连接的自动提交模式为给定状态的flag
**当flag=true:表示自动提交
**当flag=fasle:表示手动提交,开启事务
public void commit():将数据持久化提交到数据库
public void rollback: 回滚事务
*步骤:
1.获取Conection连接对象
2.开启事务 setAutoCommit(false)
3.定义sql语句
4.获取PreparedStatement对象
5.执行sql语句,获得结果
6.如果sql语句正常执行,没有问题,提交事务
7.处理结果
8.如果sql语句执行错误,回滚事务
9.关闭资源
*代码体现:
public class Jdbc_affairDemo8 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
//1. 获取连接
try {
conn = JDBCUtils.getConnection();
// 建立连接后开启事务
conn.setAutoCommit(false);
//2. 定义sql
//2.1 张三 - 500
String sql1 = "update account set balance = balance - ? where id = ?";
//2.2 李四 + 500
String sql2 = "update account set balance = balance + ? where id = ?";
//3. 获取执行的sql对象
pstmt1 = conn.prepareStatement(sql1);
pstmt2 = conn.prepareStatement(sql2);
//4. 设置参数
pstmt1.setDouble(1, 500);
pstmt1.setInt(2, 1);
pstmt2.setDouble(1, 500);
pstmt2.setInt(2, 2);
//5. 执行sql
pstmt1.executeUpdate();
// 手动制造异常
int i = 3 / 0;
pstmt2.executeUpdate();
// 提交事务
conn.commit();
} catch (SQLException e) {
// 事务回滚
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
} finally {
JDBCUtils.close(pstmt1, conn);
JDBCUtils.close(pstmt2, null);
}
}
}
标签:except 存储 close 错误 建立 操作 res stack void
原文地址:https://www.cnblogs.com/linjing111/p/12723014.html