Нужно ли мне записывать весь доступ к базе данных как транзакцию? - PullRequest
1 голос
/ 08 ноября 2011

Чтобы обеспечить безопасность, нужно ли мне писать код доступа к базе данных следующим образом:


public void updateOrder(OrderData order) throw Exception {
            ....
            coon.setAutoCommit(false);
            Statement stmt = conn.createStatement();
            String sql = "update order set .... where ";
            try {
                 stmt.executeUpdate(sql);
                 conn.commit();
            } catch (Exception e) {
                 conn.rollback();
            } finally {</p>

        }

}

В этом примере у меня есть доступ только к одной таблице, мне все еще нужно рассматривать ее как транзакцию? Нужно ли записывать весь доступ к базе данных как транзакцию, подобную этой?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

В autoCommit база данных (или драйвер JDBC) будет запускать и фиксировать транзакции для индивидуально выполняемых операторов. Так что, если это единственный оператор, который должен быть выполнен, вам не нужно устанавливать autoCommit в false и вам также не нужно обрабатывать коммит или откат самостоятельно.

С другой стороны, если вы хотите выполнить несколько операторов, которые должны фиксировать или выполнять откат атомарно, вам нужно отключить автоматическую фиксацию.

0 голосов
/ 08 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...