设置connection.setAutoCommit(false);
之后,在两条操作语句之间故意制造错误,发现不会自动回滚;
try {
connection = JDBCUtils.getConnection();
connection.setAutoCommit(false);
statement1 = connection.createStatement();
statement2 = connection.createStatement();
statement1.executeUpdate("update account set balance = balance - 500 where name = '王五'");
int a = 5 / 0; // 故意制作错误
statement2.executeUpdate("update account set balance = balance + 500 where name = '张三'");
connection.commit();
} catch (Exception err) {
try {
if (connection != null) {
System.out.println("rollback");
connection.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(err.getMessage());
}
后来发现不是代码的问题,是mysql的表引擎导致的
数据库的引擎如果是innodb, 不执行commit,数据不会更新;如果用的是myisam引擎,因为不支持事务,不执行commit,也会更新数据。
扫码在手机查看
您没有登录或者此篇文章不允许评论哟~~
暂无评论