事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时失败,要么同时成功
操作:
1.操作事务
2.提交事务
3.回滚事务
使用connection对象来管理事务
Connection 接口中与事务有关的方法 | 说明 |
---|---|
void setAutoCommit(boolean autoCommit) | 参数是 true 或 false,如果设置为 false,表示关闭自动提交,相当于开启事务 |
void commit() | 提交事务 |
void rollback() | 回滚事务 |
开发步骤:
- 获取连接
- 开启事务
- 获取到preparedStatement
- 使用preparedStatement执行两次更新操作
- 正常情况下提交事务
- 出现异常回滚事务
- 最后关闭资源
代码演示:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* @ClassName: Jdbc_Base08
* @Description: TODO
* @author: Doge_fang
* @date: 2020/2/16 12:48
*
* 事务操作
*/
public class Jdbc_Base08 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pre1= null;
PreparedStatement pre2= null;
try {
//获取连接
conn = JdbcUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//定义sql
String sql1 = "update salary set money = money-? where id = ?";
String sql2 = "update salary set money = money+? where id = ?";
//获取执行sql对象
pre1 = conn.prepareStatement(sql1);
pre2 = conn.prepareStatement(sql2);
//设置参数
pre1.setDouble(1,300);
pre1.setInt(2,1001);
pre2.setDouble(1,300);
pre2.setInt(2,1002);
//执行sql
pre1.executeUpdate();
pre2.executeUpdate();
//提交事务
conn.commit();
} catch (SQLException e) {
try {
if(conn != null) {
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
JdbcUtils.close(conn,pre1);
JdbcUtils.close(conn,pre2);
}
}
}