具有多个插入且不回滚的Java事务

具有多个插入且不回滚的Java事务,java,prepared-statement,Java,Prepared Statement,我试图在Java中将数据插入到多个表中。如果在1个表中插入失败,它应该回滚所有表中的数据。但由于某些原因,数据插入到两个表中,而不是插入到其中一个表中。它不应该插入到其他2个表中,因为在其中一个表上插入失败。这就是我的代码的样子: try { conn.setAutoCommit(false); dbConnector.insertA(myList1, conn); dbConnector.insertB(myList2, conn); dbConnec

我试图在Java中将数据插入到多个表中。如果在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();

   ...
public void insertA(列表myList1,连接连接){
String myQuery=“插入表(colA、colB、colC)值(?,?);”;
PreparedStatement=conn.prepareStatement(myQuery);
对于(MyClass mc:myList1){
statement.setString(1,mc.getA());
statement.setString(2,mc.getB());
statement.setString(3,mc.getC());
语句addBatch();
}
语句。executeBatch();
语句。close();
康涅狄格州关闭();
...
}

注意:
insertB
insertC
方法遵循与
insertA
相同的模式

我哪里出了问题?任何帮助都将不胜感激。

根据

如果批处理更新中的某个命令无法正确执行, 此方法抛出一个BatchUpdateException,JDBC驱动程序可以或 不能继续处理批处理中的其余命令

您的驱动程序风格似乎在爆炸后继续处理剩余的命令,为了实现这一点,它必须打开一个新的事务来执行剩余的语句

根据

如果批处理更新中的某个命令无法正确执行, 此方法抛出一个BatchUpdateException,JDBC驱动程序可以或 不能继续处理批处理中的其余命令


您的驱动程序风格似乎在爆炸后继续处理剩余的命令,为了实现这一点,它必须打开一个新的事务来执行剩余的语句

您不应该在调用commit()或rollback()之前关闭连接,在这种情况下,某些数据库可能会隐式提交内部
insertA
完全出乎意料。您不应该在调用commit()或rollback()之前关闭连接,在这种情况下,某些数据库可能会隐式提交。我想知道您的代码是否正确
conn.close()内部
insertA
完全出乎意料。感谢您的回复。是的-这是我在桌子上遇到的例外,它不会插入。我正在尝试插入到
DB2
。如果我不批量插入,所有操作都会成功进行。但是,一旦我添加代码以批量插入,它就会失败。谢谢您的回复。是的-这是我在桌子上遇到的例外,它不会插入。我正在尝试插入到
DB2
。如果我不批量插入,所有操作都会成功进行。但是,一旦我添加了要批量插入的代码,它就会失败。