事务处理在数据库开发中具有非常重要的作用,所谓的事务就是指,所有的操作要么一起成功,要么一起失败。事务本身具有ACID特性,即原子性、一致性、隔离性、持久性4个特征。
在之前的代码中,即使后面的代码错误,但只要前面的正确,正确的代码会被写入数据库的更新操作,这是由于JDBC的自动提交模式。而使用了事务控制后,可以调用setAutoCommit()方法取消食物自动提交,随后再根据SQL的执行结果来决定事务是否需要提交或者回滚。
使用JDBC实现事务控制(利用Statement批处理进行演示)
package 数据库;
import java.sql.Statement;
import java.util.Arrays;
import java.sql.Connection;
import java.sql.DriverManager;
public class 事务控制 {
private static final String driver="com.mysql.cj.jdbc.Driver";
private static final String url="jdbc:mysql://localhost:3306/hello?"
+ "characterEncoding=utf-8&&serverTimezone=UTC";
private static final String user="root";
private static final String pass="123";
public static void main(String[] args)throws Exception {
Connection con=null;
Class.forName(driver);
con=DriverManager.getConnection(url,user,pass);
con.setAutoCommit(false); //取消事务的自动提交
Statement state=con.createStatement();
try {
state.addBatch(sql);
state.addBatch(sql);
state.addBatch(sql);
int result[]=state.executeBatch(); //sql语句的批处理
con.commit(); //事务提交
System.out.println("批量更新操作:"+Arrays.toString(result));
} catch (Exception e) {
// TODO: handle exception
con.rollback(); //事务回滚
}
con.close();
}
}