学的新知识 要记录一哈哈:
首先我们要知道事务的控制主要是三大步骤:
1,start transaction:开启事务。
2,rollback:回滚事务;(savepoint:这个是当代码运行出现错误的时候,回滚到指定的位置);
3,commit:提交事务。
接下来写个Test代码
主要看事务是怎么发生的!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
import org.junit.Test;
public class test {
@Test
public void time() {
Connection conn =null;
PreparedStatement stmt=null;
try{
// 获取与数据库的链接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名", "数据库用户名", "密码");
conn.setAutoCommit(false);//默认自动提交,现在改为false手动提交
// 创建代表SQL语句的对象(建议用PrepareStatement)
stmt = conn.prepareStatement("sql语句银行A用户转100给B:资金减去100");
// 执行SQL语句
stmt.executeUpdate();//根据不同的操作 增删改查 运用不同的方法
//在此设置回滚点当出现异常时操作则回滚到这个点
//Savepoint savepoint = conn.setSavepoint();//如果没有设置则回滚到第一条sql语句执行之前
stmt = conn.prepareStatement("sql语句银行B用户接收100:资金加100");
// 执行SQL语句
stmt.executeUpdate();
conn.commit();//提交事务
}catch (Exception e) {
// TODO: handle exception
if(conn!=null){
try {
conn.rollback();//rollback
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}finally{
if(conn!=null){
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
stmt.close();
conn.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}