我需要做一个相当长的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();
}
答案 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块中包装两个调用以确保正确操作。 (在您的情况下,代码甚至不会按编写的方式编译。)