Выполнить два разных запроса в одной транзакции - PullRequest
9 голосов
/ 01 февраля 2011

Я пытаюсь выполнить два запроса на вставку в одном Statement, объединяя их в одну транзакцию.

Я искал метод addBatch, но если я правильно понял, его можно использовать содин PreparedStatement для выполнения одной и той же вставки несколько раз с разными параметрами или для использования с Statement объектом для добавления дополнительных запросов к пакету, но без возможности добавления параметров (поэтому я мог бы добавить значенияв строке SQL. Стиль внедрения SQL).

Я также попробовал наивный подход к записи обеих вставок в одном выражении SQL (insert into table1 values(?, ?); insert into table2 values(?, ?);), но таким образом PreparedStatement видит только первые два параметра,и пытается установить 3-й и 4-й броски исключения.

1 Ответ

23 голосов
/ 01 февраля 2011

Вы можете отключить автокоммит, выполнить два отдельных оператора, а затем зафиксировать транзакцию вручную:

connection.setAutoCommit(false);
try {
    ...
    stmt1.execute();
    ...
    stmt2.execute();
    connection.commit();
} catch (Exception ex) {
    connection.rollback();
}
...