JDBC事物回滚

Mysql会发生事物提交的情况
① DDL事件
② DML事件
可以使用conn.setAutoCommit(false);设置取消自动提交
③ 连接的关闭
如何保持事物的一致性:
使用同一个Connection连接 如果发生错误,则数据库可以Rollbake到操作之前
JDBC事物代码实现
代码:

 public void update(Connection conn,String sql, Object ...args) throws SQLException, IOException, ClassNotFoundException {

        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            preparedStatement.setObject(i+1, args[i]);
        }
        preparedStatement.execute();
        jdbcUtils.close(null, preparedStatement);
    }
     @Test
    /**
     * JDBC事物
     * 一组事物同时发生  保持一致性
     */
    public void transactionTest1()  {
        Connection  conn = null;
        try {
            conn = jdbcUtils.getConnection();
//            取消自动提交
            conn.setAutoCommit(false);
            String sql = "update money set money  = money - 100 where password=?";
            update(conn, sql, "BB");

            System.out.println( 110/0);
            sql = "update money set money = money + 100 where password=?";
            update(conn, sql, "AA");
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
//            出现错误回滚数据
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally {
            try {
                jdbcUtils.close(conn, null);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

代码成功运行,但是却没有达到回滚的效果,因为Mysql的MyISAM不支持事物回滚而
所以在代码中设置autocommit没有什么作用, 但不会报错
在这里插入图片描述
改变表格或数据库的储存引擎即可

ALTER TABLE 表名 ENGINE = InnoDB; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值