Выполнение двух разных запросов в одной транзакции

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

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

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

1 ответов


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

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