事务
什么是事务:
- 事务是以一种可靠的、一致的方式,访问和操作数据库的程序单元
- 说人话:要么把事情做完,要么什么都不做,不要做一半
- 事务依赖于数据库实现,MySQL通过事务区作为数据缓冲地带
JDBC俩种事务模式
- JDBC运训俩种事务模式
- 自动提交事务模式
- 手动提交事务模式
自动提交事务模式
- 自动提交模式是指每执行一次写操作SQL,自动提交事务
- 自动提交开启方法:conn.setAutoCommit(true)
- 自动事务是JDBC默认行为,此模式无法保证多数据一致
手动提交事务模式
- 手动提交模式是指现实调用commit()与rollback()方法管理事务
- 手动提交开启方法:conn.setAutoCommit(false)
- 手动提交事务可保证多数据一致性,但必须手动调用提交/回滚方法
代码案例:
package com.imooc.jdbc.sample;
import com.imooc.jdbc.goodapp.common.DBUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionSample {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtils.getConnection();
conn.setAutoCommit(false);
String sql = "insert into employee(eno, ename, salary, dname) values(?, ?, ?, ?)";
for (int i = 1000; i < 2000; i++){
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, i);
pstmt.setString(2, "员工"+i);
pstmt.setFloat(3, 4000f);
pstmt.setString(4, "市场部");
pstmt.executeUpdate();
}
conn.commit();
} catch (Exception e) {
e.printStackTrace();
try {
if (conn != null && conn.isClosed() == false){
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
DBUtils.closeConnection(null, pstmt, conn);
}
}
}