我试图在一个Statement
中执行两个插入查询,将它们放在一个事务中。
我正在查看addBatch
方法,但如果我理解正确,它可以与单个PreparedStatement
一起使用,使用不同的参数多次执行相同的插入,或者在{{{ 1}}对象向批处理添加更多查询,但无法添加参数(因此我可以在sql字符串中添加值.SQL注入样式)。
我还尝试了一种在一个sql语句(Statement
)中编写插入的简单方法,但这样insert into table1 values(?, ?); insert into table2 values(?, ?);
只看到前两个参数,并尝试设置第3和第4个抛出例外。
答案 0 :(得分:23)
您可以禁用自动提交,执行两个单独的语句,然后手动提交事务:
connection.setAutoCommit(false);
try {
...
stmt1.execute();
...
stmt2.execute();
connection.commit();
} catch (Exception ex) {
connection.rollback();
}