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