COMMIT ИЛИ conn.setAutoCommit(правда)

Я заметил, что некоторые программисты используют COMMIT другое использование conn.setAutoCommit(true); завершить транзакцию или выполнить откат, в чем преимущества использования одного вместо другого?

Где главное отличие?

conn.setAutoCommit(true);

над

statement.executeQuery(query);
statement.commit();

2 ответа

Решение

Вы должны в целом использовать Connection.commit() и не Connection.setAutoCommit(true) совершить транзакцию, если вы не хотите переключаться с использования транзакции на модель autoCommit "транзакция на оператор".

Это сказал, позвонив Connection.setAutoCommit(true) в то время как в транзакции совершит транзакцию (если драйвер соответствует разделу 10.1.1 спецификации JDBC 4.1). Но вам действительно следует делать это только в том случае, если вы хотите оставаться в autoCommit после этого, поскольку включение / отключение autoCommit в соединении может привести к более высоким издержкам соединения, чем просто фиксация (например, из-за необходимости переключения между менеджерами транзакций выполните дополнительные проверки)., так далее).

Вы также должны использовать Connection.commit() и не использовать собственную команду SQL COMMIT, Как подробно описано в документации по подключению:

Примечание. При настройке соединения приложения JDBC должны использовать подходящий метод соединения, такой как setAutoCommit или setTransactionIsolation. Приложения не должны вызывать команды SQL напрямую, чтобы изменить конфигурацию соединения, когда доступен метод JDBC.

Дело в том, что такие команды, как commit() а также setAutoCommit(boolean) может делать больше работы на заднем плане, как закрытие ResultSets и закрытие или сброс Statements, Использование команды SQL COMMIT обойдёт это и потенциально приведёт ваш драйвер / соединение в неверное состояние.

Использование conn.setAutoCommit(); применяется к соединению и дает вам возможность выполнить X запросов в одной транзакции или использовать одну транзакцию для execute

Как описывает API:

 void setAutoCommit(boolean autoCommit)
                    throws SQLException

Устанавливает режим автоматической фиксации этого соединения в заданное состояние. Если соединение находится в режиме автоматической фиксации, все его операторы SQL будут выполняться и фиксироваться как отдельные транзакции. В противном случае его операторы SQL группируются в транзакции, которые завершаются вызовом метода commit или отката метода. По умолчанию новые подключения находятся в режиме автоматической фиксации

Для простого случая:

conn.setAutoCommit(false); 
statement.executeQuery(query); 
statement.commit();

будет таким же как:

conn.setAutoCommit(true); 
statement.executeQuery(query);
Другие вопросы по тегам