JDBC控制事务:
- 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
- 操作:
1.开启事务
在执行sql之前开启事务
2.提交事务
在所有sql执行完成提交事务
3.回滚事务
在catch中回滚事务 - 使用Connection对象来管理事务
开启事务: setAutoCommit(boolean autoCopmit) : 调用该方法设置参数为false,即开启事务
提交事务: commit()
回滚事务: rollback()
案例:
修改james和lili的salary值:
package cn.abc.jdbc;
import cn.abc.util.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcDemo08 {
public static void main(String[] args) {
Connection conn= null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
try {
//1.获取连接
conn = JDBCUtils.getConnection();
//开启事务
conn.getAutoCommit();
//2.定义sql
//james+100
String sql1 ="update acount set salary = salary +? where name = 'james'";
//lili-100
String sql2 ="update acount set salary = salary -? where name = 'lili'";
//3.获取sql对象
pstmt1 = conn.prepareStatement(sql1);
pstmt2 = conn.prepareStatement(sql2);
//4.设置参数
pstmt1.setInt(1,100);
pstmt2.setInt(1,100);
//5.执行sql
pstmt1.executeUpdate();
pstmt2.executeUpdate();
//提交事务
conn.commit();
} catch (Exception e) {
//事务回滚
try {
if(conn != null){
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
JDBCUtils.close(pstmt1,conn);
JDBCUtils.close(pstmt1,null);
}
}
}