【问题标题】:Rollback transaction not working properly回滚事务无法正常工作
【发布时间】:2019-10-21 22:01:44
【问题描述】:

在插入、更新或删除等数据库操作命令中,有时会由于无效数据而引发异常。为了保护应用程序数据的完整性,我们必须确保在事务失败时必须回滚

  PreparedStatement ps = null;
    Connection conn = null;
    try {
          conn = DriverManager.getConnection( URL, USERNAME, PASSWORD );

          String query = "INSERT INTO tbl1(id, username) " +
                "VALUES (?, ?)";
          ps = conn.prepareStatement( query );
          ps.setString( 1, "javaduke" );
          ps.execute();

          query = "INSERT INTO tbl2 (id, tbl1_id, " +
               "quantity, price) VALUES (?, ?, ?, ?)";
          ps = conn.prepareStatement( query );
          ps.setInt( 1, id );
          ps.setInt( 2, tbl_id );
          ps.setInt( 3, 10 );
          ps.setDouble( 4, 29.99 );
          ps.execute();
         }
    catch ( SQLException e )
    {
conn.rollback()
        e.printStackTrace();
    }

【问题讨论】:

    标签: mysql database transactions


    【解决方案1】:

    我猜这是Java。

    在获得连接对象后,立即关闭自动提交,就像这样。

      conn = DriverManager.getConnection( URL, USERNAME, PASSWORD );
      conn.setAutoCommit(false);
    

    在您最后一次execute() 之后执行此操作。

      conn.commit();
    

    那么您的异常处理程序中的rollback() 应该会按照您的预期进行。

    这应该将您的事务范围扩展到单个 SQL 查询之外。

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多