Мне нужно изменить несколько таблиц в одной функции.Все они должны преуспеть, или все провалились.Если одна операция не удалась, я хочу, чтобы все они потерпели неудачу.У меня есть следующее:
public void foo() throws Exception {
Connection conn = null;
try {
conn = ...;
conn.setAutoCommit(false);
grok(conn);
conn.commit();
}
catch (Exception ex) {
// do I need to call conn.rollback() here?
}
finally {
if (conn != null) {
conn.close();
conn = null;
}
}
}
private void grok(Connection conn) throws Exception {
PreparedStatement stmt = null;
try {
// modify table "apple"
stmt = conn.prepareStatement(...);
stmt.executeUpdate();
stmt.close();
// modify table "orange"
stmt = conn.prepareStatement(...);
stmt.executeUpdate();
stmt.close();
...
}
finally {
if (stmt != null) {
stmt.close();
}
}
}
Мне интересно, нужно ли мне вызывать rollback (), если во время этого процесса что-то идет не так.пул соединений.В приведенном выше примере я также проверяю закрытие каждого PreparedStatement с помощью операторов finally, просто для краткости опущенных.
Спасибо