DB2 -错误代码= -4229,SQL状态=空

aemubtdh  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(1244)

我使用EJB中的一个批处理类,在DB2中使用命令行executeBatch在同一提交中INSERT处理100多行。
当我执行命令时显示这个错误:ERRORCODE=-4229, SQLSTATE=null .
该ID序列是CREATE TABLE上的IDENTITY子句。

表格:

CREATE TABLE table (col1 INT,
                       col2 DOUBLE,
                       col3 INT NOT NULL GENERATED ALWAYS AS IDENTITY)

有人知道吗?

错误:

Caused by: nested exception is: com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.24.97] Batch failure. The batch was submitted, but at least one exception occurred in an individual batch member.
Use getNextException() to retrieve exceptions for specific batch elements. ERRORCODE=-4229, SQLSTATE=null
tvokkenx

tvokkenx1#

这不是一个答案,而是一个处理Db2异常的建议,以便有能力处理这样的错误。
如果您无法重写错误处理,唯一可以做的就是在客户端上启用JDBC跟踪或/和将Db2 dbm cfg DIAGLEVEL参数设置为4。

PreparedStatement pst = null;
try 
{
    pst = ...;
    ...
    int [] updateCounts = pst.executeBatch();
    System.out.println("Batch results:");
    for (int i = 0; i < updateCounts.length; i++) 
      System.out.println("  Statement " + i + ":" + updateCounts[i]);
} catch (SQLException ex) 
{
    while (ex != null) 
    {
      if (ex instanceof com.ibm.db2.jcc.DB2Diagnosable) 
      {
        com.ibm.db2.jcc.DB2Diagnosable db2ex = com.ibm.db2.jcc.DB2Diagnosable) ex;
        com.ibm.db2.jcc.DB2Sqlca sqlca = db2ex.getSqlca();
        if (sqlca != null) 
        {
          System.out.println("SQLCODE: " + sqlca.getSqlCode());
          System.out.println("MESSAGE: " + sqlca.getMessage());
        } 
        else 
        {
          System.out.println("Error code: " + ex.getErrorCode());
          System.out.println("Error msg : " + ex.getMessage());
        }
      } 
      else 
      {
        System.out.println("Error code (no db2): " + ex.getErrorCode());
        System.out.println("Error msg  (no db2): " + ex.getMessage());
      }
      if (ex instanceof BatchUpdateException) 
      {
        System.out.println("Contents of BatchUpdateException:");
        System.out.println(" Update counts: ");
        System.out.println(" Statement.SUCCESS_NO_INFO: " + Statement.SUCCESS_NO_INFO);
        System.out.println(" Statement.EXECUTE_FAILED : " + Statement.EXECUTE_FAILED); 

        BatchUpdateException buex = (BatchUpdateException) ex;
        int [] updateCounts = buex.getUpdateCounts(); 
        for (int i = 0; i < updateCounts.length; i++) 
          System.out.println("  Statement " + i + ":" + updateCounts[i]);
      }
      ex = ex.getNextException();
    }
}
...

相关问题