/
/
/
/
package Ajdbc1;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//事务
public class Test8 {
public static void main(String[] args) {
add();
}
public static void add(){
Connection conn=null;
ResultSet rs=null;
PreparedStatement stm=null;
try {
conn=DBUtil.getConn();
String sql1="update aa set money=money-1000 where id=1";//张三
String sql2="update aa set money=money+1000 where id=2";//李四
conn.setAutoCommit(false);//开启事务
stm=conn.prepareStatement(sql1);
stm.executeUpdate();
//int a=9/0;//如果这里出错了直接跳到Exception异常处理,然后事务回滚到开启事务那一条;;金额不会改变
stm=conn.prepareStatement(sql2);
stm.executeUpdate();
conn.commit();//提交事务 如果开启了事务没有提交事务,那金额也不会改变
}catch (Exception e){
e.printStackTrace();
try {
conn.rollback();//事务回滚。回到开启事务的地方
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally {
DBUtil.close(rs,stm,conn);
}
}
}
/
设置保存点
。
package Ajdbc1;
import java.sql.*;
//事务
public class Test8 {
public static void main(String[] args) {
add(false);
}
public static void add(boolean 手续费){
Connection conn=null;
ResultSet rs=null;
PreparedStatement stm=null;
try {
conn=DBUtil.getConn();
String sql1="update aa set money=money-1000 where id=1";//张三
String sql2="update aa set money=money-10 where id=1";//手续费
conn.setAutoCommit(false);//开启事务
stm=conn.prepareStatement(sql1);
stm.executeUpdate();
//int a=9/0;//如果这里出错了直接跳到Exception异常处理,然后事务回滚到开启事务那一条;;金额不会改变
Savepoint sp = conn.setSavepoint();//设置保存点
stm=conn.prepareStatement(sql2);
stm.executeUpdate();
if (手续费){//如果为true不花手续费
conn.rollback(sp);//回滚到保存点,然后保存点下面两台不执行,直接提交,这样手续费就不会减了
}
conn.commit();//提交事务 如果开启了事务没有提交事务,那金额也不会改变
}catch (Exception e){
e.printStackTrace();
try {
conn.rollback();//事务回滚。回到开启事务的地方
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally {
DBUtil.close(rs,stm,conn);
}
}
}
/