Java 在iBatis中使用多个startTransaction和commitTransaction并只使用最后一个endTransaction安全吗?

Java 在iBatis中使用多个startTransaction和commitTransaction并只使用最后一个endTransaction安全吗?,java,transactions,ibatis,Java,Transactions,Ibatis,我写了一个程序来插入批量数据。为了加快速度,我在中间进行了事务处理。 多次调用startTransaction和commitTransaction,只调用endTransaction一次安全吗 try { sqlMap.startTransaction(); // Do some work. sqlMap.commitTransaction(); sqlMap.startTransaction(); // Do some work. sqlMap.comm

我写了一个程序来插入批量数据。为了加快速度,我在中间进行了事务处理。 多次调用startTransaction和commitTransaction,只调用endTransaction一次安全吗

try {
  sqlMap.startTransaction();
  // Do some work.      
  sqlMap.commitTransaction();

  sqlMap.startTransaction();
  // Do some work. 
  sqlMap.commitTransaction();

  sqlMap.startTransaction();
  // Do some work. 
  sqlMap.commitTransaction();
} catch (SQLException e) {
  e.printStackTrace();
  throw new MyException();
} finally {
  try {
    sqlMap.endTransaction();
  }
  catch (SQLException e) {
    e.printStackTrace();
    throw new MyException();
  }
}

谢谢。

在iBatis中,startTransaction、commitTransaction、endTransaction应按所述顺序调用一次。如果多次调用startTransaction和commitTransaction而不调用endTransaction,则会耗尽数据库连接并出现错误

您真的需要为每次插入都进行事务处理吗?您不会在每次插入时都使用事务来加快任何速度。看看这个。另外,对我来说,您的try-catch块看起来很奇怪,可能有误导性:如果出现问题,一个或多个事务可能不会执行,它将在第一个失败的事务上停止。我为每个事务插入了10000条记录,比插入没有事务的记录更快。这里的事务只是为了加速,而不是为了实际事务。因此,当出现问题时,不执行以下代码是可以的。