откат и фиксация только тогда, когда не в режиме автоматической фиксации

документ Java для Connection#rollback четко заявляет:

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

Аналогичная оговорка существует для метода commit.

Однако, глядя на код, например. в Apache commons DbUtils Я вижу только:

public static void rollback(Connection conn) throws SQLException {
        if (conn != null) {
            conn.rollback();
        }
}

Кажется странным иметь служебную функцию только для защиты от NPE и не проверять режим автоматической фиксации. Я ожидал чего-то вроде следующих строк:

public static void rollback(Connection conn) throws SQLException {
    if (conn != null) {
        final boolean autoCommit = (boolean) conn.getAutoCommit();
        if (!autoCommit)
            DbUtils.rollback(conn);
    }
}

Соблюдается ли на практике предостережение в javadoc (что rollback следует вызывать только тогда, когда режим автоматической фиксации отключен), и если да, то почему бы успешной библиотеке JDBC не беспокоиться об этом?


person Marcus Junius Brutus    schedule 01.06.2017    source источник
comment
Причина в том, что если вы не отключили автокоммит, то почему вы вызываете DbUtils.rollback(..) или DbUtils.commit(..) в своем коде, и если вы вызываете их, это явно ошибка, которую вы должны заметить. Честно говоря, учитывая современные попытки использования ресурсов, я нахожу многие методы DbUtils довольно бесполезными.   -  person Mark Rotteveel    schedule 01.06.2017


Ответы (1)


При включенной автоматической фиксации метод отката просто не действует.

person AlexS    schedule 01.06.2017