天天看点

java事务以及批量更新java事务以及批量更新

java事务以及批量更新

1.概念简介

事务是一步或多部数据库操作序列组成的逻辑单元,这系列操作要么全部执行,要么全部放弃执行。

2.注意

一个事务可以由一组DML组成或者一个DDL语句或者一个DCL语句。DCL和DDL语句最多只能有一个,因为DDL和DCL语句会导致事务立即提交。

3.事务代码示例

Connection conn=DriverManager.getConnection(url,username,password);
Statement stmt=conn.createStatement();
try{
if(conn.getAutoCommit()){//确认事务是否是自动提交
conn.setAutoCommit(false);//关闭事务自动提交
}
stmt.executeUpdate(...);
stmt.executeUpdate(...);
stmt.executeUpdate(...);
conn.commit();

}catch{
conn.rollback();//失败回滚
}
           

4.事务还支持SavePointer配合回滚操作(详细在后面讨论)

5.JDBC批量更新(只支持DDL和DML操作)

5.1语法示例

Statement stmt =conn.createStatement();
stmt.addBatch(sql1);
stmt.addBatch(sql2);
.......
stmt.executeBatch();//返回值是每个DDL或者DML语句执行后返回的int值组成的int数组。
           

从executeBatch()的返回值可以看出执行每个sql语句的方法是executeUpdate(),而不是execute()方法。

5.2批量更新配合事务使用

说明:

当批量操作有出错时回滚的要求,应该配合事务使用。

思路:

//保存当前自动提交模式
boolean autoCommit=conn.getAutoCommit();
//关闭自动提交
conn.setAutoCommit(false);
//使用statement收集多条sql语句;一次性执行
Statement stmt =conn.createStatement();
stmt.addBatch(sql1);
stmt.addBatch(sql2);
.......
stmt.executeBatch();
//手动提交
conn.commit();
//恢复之前的事务提交模式
conn.setAutoCommit(autoCommit);
           

ps:代码是直接手敲的没运行,可能少个标点,多个字母什么的。另外有错的话请一定提出!