JDBC控制事务
1.**事务概念:**一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
2.**基本操作:**使用connection对象来管理事务
- 开启事务
setAutocommit(boolean autocommit)//调用该方法设置参数为false,即开启事务*在执行sql之前开启事务
- 提交事务
commit()//当所有sql都执行完提交事务
- 回滚事务
rollback()//在catch中回滚事多
3.案例:银行转账
- 数据库表
- 事务操作
package com.tyut.dao;
import com.tyut.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TextJdbc05 {
public static void main(String[] args) {
Connection conn = null;
try {
conn = JDBCUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//张三给李四转账500元
String sql1 = "UPDATE account SET money = money - 500 WHERE id = 1";
String sql2 = "UPDATE account SET money = money + 500 WHERE id = 2";
PreparedStatement ps1 = conn.prepareStatement(sql1);
PreparedStatement ps2 = conn.prepareStatement(sql2);
ps1.executeUpdate();
ps2.executeUpdate();
int x = 3 / 0;
//提交事务
conn.commit();
} catch (Exception e) {
//回滚事务
if (conn != null) {
try {
conn.rollback();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
throw new RuntimeException(e);
}
}
}