Выполнение двух разных запросов в одной транзакции
Я пытаюсь выполнить два запроса вставки в одном 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();
}