事务
当我们一次需要执行多条sql语句时就要考虑控制事务以避免出现一些错误。
例如:当我们从一个账户给另一个账户转账时,假设第一个账户的余额已经扣除,此时电脑断电了,
第二个账户的余额也没有增加;为了避免此类事情的发生,我们可以对事物进行控制,要么增扣除和增加都成功,
要么扣除、增加都失败。
创建表user
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
NAME VARCHAR(20),
balance DOUBLE
);
创建测试类Test1.java
package com.oracle.test;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import com.oracle.utils.DataSourceUtils;
public class Test1 {
public static void main(String[] args){
try {
//开启事务
DataSourceUtils.startTransaction();
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//编写sql语句
String sql1 = "update user set balance=balance-500 where id=1";
String sql2 = "update user set balance=balance+500 where id=2";
//执行sql
qr.update(DataSourceUtils.getConnection(), sql1);
//失败
int c=100/0;
qr.update(DataSourceUtils.getConnection(), sql2);
//事务提交
DataSourceUtils.commitAndRelease();
//关闭事务
DataSourceUtils.closeConnection();
} catch (Exception e) {
//失败则回滚
try {
DataSourceUtils.rollback();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}