java – 为什么我必须在JDBC中使用回滚?
发布时间:2020-12-15 08:26:55 所属栏目:Java 来源:网络整理
导读:如果我不使用connection.rollback(),由于事务尚未提交,我可以看到数据库的数据也不会改变任何东西,那为什么我仍然需要使用connection.rollback()? try { connection.setAutoCommit(false); bankDao.transferMoney(+2000,1,connection); //account1:+$2000 i
如果我不使用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(); } } 解决方法
您需要显式回滚以确保事务结束.如果您没有显式提交或回滚,那么 – 如果继续使用连接 – 稍后可能会由应用程序的其他部分意外提交更改.明确回滚可以防止这种情况发生.
在其他情况下,连接关闭将结束事务.但是,它是特定于驱动程序的,无论连接关闭是提交还是回滚事务.
未明确回滚您的交易也可能导致交易持续时间超过必要,持有锁等可能阻止其他交易完成其工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |