在多个方法中分发JDBC事务的语句

时间:2011-09-09 02:29:20

标签: java jdbc transactions

我需要做一个相当长的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 个答案:

答案 0 :(得分:2)

总之:是的。

顺便说一下,长时间运行的交易可能是有害的。例如,in SQL Server, they can cause the transaction log to fill

答案 1 :(得分:1)

我认为没有任何问题。重要的是确保在完成后关闭连接,这是你在那里做的。我会确保打开连接的代码与关闭它的方法相同,因为连接泄漏很难跟踪。

作为旁注,我喜欢使用Spring的JDBC功能。它为您管理连接,非常易于使用。 http://static.springsource.org/spring/docs/current/spring-framework-reference/html/jdbc.html

答案 2 :(得分:1)

要纠正的两件事:

rollback()上的close()java.sql.Connection方法都抛出SQLException。您应该在try / catch块中包装两个调用以确保正确操作。 (在您的情况下,代码甚至不会按编写的方式编译。)