您当前的位置: 首页 > 

liaowenxiong

暂无认证

  • 3浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JDBC的事务管理

liaowenxiong 发布时间:2021-11-17 23:17:17 ,浏览量:3

文章目录
  • 事务定义
  • 操作步骤
  • 示例代码

事务定义

一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

操作步骤

使用 Connection 对象来管理事务。

1.开启事务 2.提交事务 3.回滚事务

开启事务: setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务 在执行 SQL 语句前开启事务

提交事务: commit() 当所有 SQL 执行完后提交事务

回滚事务: rollback() 出现异常后回滚事务,即在 catch 中回滚事务

示例代码
package priv.lwx.javaex.jdbc;

import priv.lwx.javaex.jdbc.util.ConnectionUtils2;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * description
 *
 * @author liaowenxiong
 * @date 2021/11/17 17:52
 */

public class JDBCDemo12 {

    public static void main(String[] args) {
        // 定义sql
        String sql1 = "update account set balance = balance - ? where id = ?";
        String sql2 = "update account set balance = balance + ? where id = ?";
        // 获取连接对象
        Connection conn = ConnectionUtils2.getConnection();
        PreparedStatement pstmp1 = null;
        PreparedStatement pstmp2 = null;
        try {
            // 开启事务
            conn.setAutoCommit(false);
            // 获取预编译语句对象
            pstmp1 = conn.prepareStatement(sql1);
            pstmp2 = conn.prepareStatement(sql2);

            // 给sql语句的参数赋值
            pstmp1.setBigDecimal(1, BigDecimal.valueOf(500));
            pstmp1.setInt(2, 1);
            pstmp2.setBigDecimal(1, BigDecimal.valueOf(500));
            pstmp2.setInt(2, 2);

            // 执行SQL语句
            pstmp1.executeUpdate();
            // int i = 1/0;
            pstmp2.executeUpdate();

            // 提交事务
            conn.commit();
        } catch (SQLException e) {
            // 有异常回滚事务
            try {
                conn.rollback();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            ConnectionUtils2.close(conn, pstmp1, pstmp2);
        }
    }
}

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0395s