Пакетная вставка Jdbc не выполняет все операторы после сбойного оператора в Db2 i - PullRequest
0 голосов
/ 08 февраля 2019

Я вставляю записи в таблицу в базе данных Db2-400 (Db2 i), используя пакет JDBC prepared statement.В таблице есть первичный ключ.

Если в любом операторе в пакете есть дубликат ключа, он выдает BatchUpdateException (что ожидается).Но когда есть BatchUpdateException, он не выполняет все последующие операторы в пакете.

Предположим, что пакет имеет 5 операторов.Исключение составляет только третье утверждение.Тогда 4-е и 5-е утверждение также не выполняется.

В отличие от Db2 LUW, который успешно выполняет все операторы после этого сбойного оператора.

Пример:

Таблица UQTEST имеет первичный столбец.Код добавляет ключ как 2, когда значение i равно 3, чтобы дублировать ключ для оператора.

    PreparedStatement stmt = conn.prepareStatement("INSERT INTO  LIBTEST.UQTEST VALUES(?, ?)");

     for (int i = 1; i <=5; i++)
     {

         if (i ==3)
         {
            stmt.setInt(1, 2);

         }
         else
         {
            stmt.setInt(1, i);

         }
         stmt.setString(2, "Abc");
         stmt.addBatch();
     }

     try
     {

          stmt.executeBatch();
     }
     catch(BatchUpdateException ex)
     {
         int[] updatecounts = ex.getUpdateCounts();
         System.out.printlns(updatecounts);
     } 

После выполнения этого кода в таблицу вставляются только 2 записи:

   1 Abc
   2 Abc

Я использую jt400.jar и используемый драйвер JDBC:

com.ibm.as400.access.AS400JDBCDriver()

Я хочу, чтобы все эти операторы были выполнены успешно, без каких-либо исключений.

...