二进制下班了
2021-04-26 22:19
采纳率: 80%
浏览 68
已采纳

idea mysql 回滚失败?

 @Test
    public void Test02() {
        Connection conn = null;
        try {
            conn = getConnection();

            conn.setAutoCommit(false);

            int aa = state04(conn, "UPDATE user_table SET balance=balance-100 WHERE user=?", "AA");

            int i = 10/0;

            int bb = state04(conn, "UPDATE user_table SET balance=balance+100 WHERE user=?", "BB");

            conn.commit();

            System.out.println("交易成功");

        } catch (Exception e) {
            e.printStackTrace();
            try {
                conn.rollback();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        } finally {
            JDBCUtil.closeResource(conn, null);
        }
    }

    //通用的增删改 --version -2.0  考虑数据库事务的转账操作
    public int state04(Connection conn, String sql, Object ...args) throws Exception {
        PreparedStatement ps = null;
        try {
            conn = getConnection();

            ps = conn.prepareStatement(sql);

            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1, args[i]);
            }

            return ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeResource(null, ps);
        }
        return 0;
    }

用数据库语句在数据库是可以成功回滚数据的

 

看的是尚硅谷的视频,找不到问题在哪。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 我是个笨比 2021-04-26 22:42
    已采纳

    你下面那个方法不需要再调用getConnection方法了吧,那样会导致两个连接不同,就会不能回滚,使用传进来的connection就可以了

    已采纳该答案
    评论
    解决 2 无用
    打赏 举报

相关推荐 更多相似问题