Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 回滚正在处理事务,但因SQLNonTransientConnectionException而崩溃_Java_Mysql_Jdbc - Fatal编程技术网

Java 回滚正在处理事务,但因SQLNonTransientConnectionException而崩溃

Java 回滚正在处理事务,但因SQLNonTransientConnectionException而崩溃,java,mysql,jdbc,Java,Mysql,Jdbc,我正在开发一个电影票务java应用程序。 有一个椅子网格,用户选择要预订的所有椅子,然后按ok进行预订(在mysql数据库中插入行)。如果任何假装的预订由于重复条目而失败,则所有预订都将回滚。 要做到这一点,请按“购买”按钮,我会: 这是可行的,因为实际上所有的预订都被取消了。 但无论如何都会抛出:java.sql.SQLNonTransientConnectionException: 当autocommit=true时无法调用回滚 所以程序失败了。 如何可能回滚正在工作,同时抛出“无法回滚”消

我正在开发一个电影票务java应用程序。 有一个椅子网格,用户选择要预订的所有椅子,然后按ok进行预订(在mysql数据库中插入行)。如果任何假装的预订由于重复条目而失败,则所有预订都将回滚。 要做到这一点,请按“购买”按钮,我会:

这是可行的,因为实际上所有的预订都被取消了。 但无论如何都会抛出:java.sql.SQLNonTransientConnectionException:

当autocommit=true时无法调用回滚

所以程序失败了。
如何可能回滚正在工作,同时抛出“无法回滚”消息?当我在每个循环中执行setAutoCommit(false)时,这怎么可能呢?

DbConnect.getConnection()
每次调用时都会得到一个新的连接

自动提交是基于每个连接设置的。因此,您正在回滚到另一个连接。controllerBooking还需要一个连接引用来使用相同的连接

因此:

    case "buy":         
        try {
        boolean success = true;         
            for(Booking b : bookingsToDo) {
                 if(DbConnect.getConnection().getAutoCommit())
                     DbConnect.getConnection().setAutoCommit(false);

                        success = controllerBooking.insertBooking(b);

                if(!success) {
                    JOptionPane.showMessageDialog(frameMain, "Error occurred, booking failed");

                    DbConnect.getConnection().rollback();                                               
                } 
            }

            if(success) {
                JOptionPane.showMessageDialog(frameMain, "Booking done");

                DbConnect.getConnection().commit();

            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        break;
        con = DbConnect.getConnection(); 
        con.setAutoCommit(false);

        for(Booking b : bookingsToDo) {
            success = controllerBooking.insertBooking(con, b);

            if(!success) {
                JOptionPane.showMessageDialog(frameMain, "Error occurred, booking failed");

                con.rollback();                                               
                break;
            } 
        }
        con.commit();