документ 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 не беспокоиться об этом?
DbUtils.rollback(..)
илиDbUtils.commit(..)
в своем коде, и если вы вызываете их, это явно ошибка, которую вы должны заметить. Честно говоря, учитывая современные попытки использования ресурсов, я нахожу многие методыDbUtils
довольно бесполезными. - person Mark Rotteveel   schedule 01.06.2017