Вставьте скидку - купон с SQL в NopCommerce

Это может быть вызвано рядом причин, включая драйвер, который вы используете.

a) Некоторые драйверы не допускают вложенных операторов. В зависимости от того, поддерживает ли ваш драйвер JDBC 3.0, вы должны проверить третий параметр при создании объекта Statement. Например, у меня была такая же проблема с драйвером JayBird для Firebird, но код работал нормально с драйвером postgres. Затем я добавил третий параметр к вызову метода createStatement и установил его в ResultSet.HOLD_CURSORS_OVER_COMMIT, и код начал нормально работать и для Firebird.

static void testNestedRS() throws SQLException {

    Connection con =null;
    try {
        // GET A CONNECTION
        con = ConexionDesdeArchivo.obtenerConexion("examen-dest");
        String sql1 = "select * from reportes_clasificacion";

        Statement st1 = con.createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY, 
                ResultSet.HOLD_CURSORS_OVER_COMMIT);
        ResultSet rs1 = null;

        try {
            // EXECUTE THE FIRST QRY
            rs1 = st1.executeQuery(sql1);

            while (rs1.next()) {
                // THIS LINE WILL BE PRINTED JUST ONCE ON
                                    // SOME DRIVERS UNLESS YOU CREATE THE STATEMENT 
                // WITH 3 PARAMETERS USING 
                                    // ResultSet.HOLD_CURSORS_OVER_COMMIT
                System.out.println("ST1 Row #: " + rs1.getRow());

                String sql2 = "select * from reportes";
                Statement st2 = con.createStatement(
                        ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);

                // EXECUTE THE SECOND QRY.  THIS CLOSES THE FIRST 
                // ResultSet ON SOME DRIVERS WITHOUT USING 
                                    // ResultSet.HOLD_CURSORS_OVER_COMMIT

                st2.executeQuery(sql2);

                st2.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            rs1.close();
            st1.close();
        }

    } catch (SQLException e) {

    } finally {
        con.close();

    }

}

b) В вашем коде может быть ошибка. Помните, что вы не можете повторно использовать объект Statement, как только вы повторно выполняете запрос в одном и том же объекте оператора, все открытые результирующие группы, связанные с оператором, будут закрыты. Убедитесь, что вы не закрываете оператор.

0
задан Div 28 February 2019 в 11:31
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: