我正在尝试将数据插入到Java中的多个表中。如果插入在1个表中失败,它应该回滚所有表中的数据。但由于某种原因,数据插入2个表而不插入其中1个表。它不应该插入到其他2中,因为其中一个表上的插入失败了。这就是我的代码:
try {
conn.setAutoCommit(false);
dbConnector.insertA(myList1, conn);
dbConnector.insertB(myList2, conn);
dbConnector.insertC(myList3, conn);
conn.commit();
} catch(SQLException e) {
try {
conn.rollback();
e.printStackTrace();
}
...
}
在插入方法中:
public void insertA(List<MyClass> myList1, Connection conn){
String myQuery = "INSERT INTO TABLE (colA, colB, colC) VALUES(?,?,?);";
PreparedStatement statement = conn.prepareStatement(myQuery);
for (MyClass mc : myList1) {
statement.setString(1, mc.getA());
statement.setString(2, mc.getB());
statement.setString(3, mc.getC());
statement.addBatch();
}
statement.executeBatch();
statement.close();
conn.close();
...
}
注意:insertB
和insertC
方法遵循与insertA
相同的模式。
我在哪里出错?任何帮助将不胜感激。
答案 0 :(得分:0)
根据java.sql.Statement.executeBatch()
的javadoc如果批量更新中的某个命令无法正确执行, 此方法抛出BatchUpdateException,JDBC驱动程序可能或 可能无法继续处理批处理中的其余命令。
看起来你的驱动程序会在爆炸后继续处理剩余的命令,为了实现这一点,它必须打开一个新的事务来执行剩余的语句。