有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我必须在JDBC中使用回滚?

如果我不使用connection.rollback(),由于事务尚未提交,我可以看到数据库的数据也不会更改任何内容,那么为什么我仍然需要使用connection.rollback()

try {

        connection.setAutoCommit(false);


        bankDao.transferMoney(+2000, 1, connection); //account1:+$2000


        if(true){
            throw new RuntimeException(); //make error
        }

        bankDao.transferMoney(-2000, 2, connection);//account2:-$2000


        connection.commit();

    } catch (Exception e) {

        try {

            connection.rollback();
            System.out.println("something wrong, roll back");

        } catch (Exception e1) {

            e1.printStackTrace();

        }

    }

共 (1) 个答案

  1. # 1 楼答案

    您是对的,当发生异常时,数据不会提交,事务最终将由数据库回滚

    InnoDB内部隐式地在错误InnoDB error handling上使用rollbak,但除非您真正理解所有场景,否则会显式地调用connection。rollback()可以确保事务尽早结束(回滚)。请注意,当调用commit或rollback时,事务结束

    在示例代码中,如果异常发生在commit()以外的行上,比如bankDao,该怎么办。因为某种原因转移资金

    您需要使用Rollaback来结束交易