1. 控制事务:
2. 练习
account表:
代码:
package com.ujn.jdbcDemo.jdbc_basic;
import com.ujn.jdbcUtils.DBUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC_affairs {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstat1 = null;
PreparedStatement pstat2 = null;
try {
conn = DBUtils.getConn();
//开启事务
conn.setAutoCommit(false);
String sql1 = "update account set balance = balance - ? where NAME = ?";
String sql2 = "update account set balance = balance + ? where NAME = ?";
pstat1 = conn.prepareStatement(sql1);
pstat2 = conn.prepareStatement(sql2);
pstat1.setDouble(1, 500);
pstat1.setString(2, "wangwu");
pstat2.setDouble(1, 500);
pstat2.setString(2, "zhangsan");
pstat1.executeUpdate();
int i = 3/0;//手动制造异常
pstat2.executeUpdate();
//在执行所有sql后提交事务
conn.commit();
} catch (Exception e) {
//如果出现异常则事务回滚
if (conn != null){
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
DBUtils.close(pstat1, conn);
DBUtils.close(pstat2, null);
}
}
}
执行结果: (在执行完成第一条sql语句后抛出异常, 事务回滚, 因此不改变account表的数据)