Распределение операторов для транзакции JDBC несколькими способами - PullRequest
2 голосов
/ 09 сентября 2011

Мне нужно сделать довольно длинную транзакцию JDBC. Могу ли я распределить операторы, необходимые для транзакции, несколькими способами, например так?

try {
    // ... Get connection
    // Start transaction
    connection.setAutoCommit(false);
    // In every one of these methods a series of statements is executed
    // All methods throw a SQLException which is caught here for rollback
    // Every method takes this connection as an argument
    method1(connection);
    method2(connection);
    // ...
    methodN(connection);
    // Commit all changes done inside the methods
    connection.commit();
} catch (SQLException e) {
    connection.rollback();
} finally {
    connection.setAutoCommit(true);
    connection.close();
}

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Одним словом: да.

Кстати, длительные транзакции могут быть вредными. Например, в SQL Server может привести к заполнению журнала транзакций .

1 голос
/ 09 сентября 2011

Две вещи, которые нужно исправить:

Оба метода rollback() и close() для java.sql.Connection throw SQLException. Вы должны заключить оба вызова в блоки try / catch, чтобы обеспечить правильную работу. (В вашем случае код даже не скомпилируется, как написано.)

1 голос
/ 09 сентября 2011

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

В качестве примечания, мне нравится использовать функциональность Spring JDBC,Он управляет соединениями для вас и действительно прост в использовании.http://static.springsource.org/spring/docs/current/spring-framework-reference/html/jdbc.html

...