gpt4 book ai didi

Java Exception 没有从 db2 控制台返回相同的异常消息?

转载 作者:行者123 更新时间:2023-11-29 04:12:18 27 4
gpt4 key购买 nike

我想从控制台/工具(例如:Data studio)在表中插入多行我收到以下错误消息

THE INSERT OR UPDATE VALUE OF FOREIGN KEY FK$MAR$S IS INVALID. SQLCODE=-530, SQLSTATE=23503, DRIVER=4.13.111

这意味着我在使用 FOREIGN KEY 变量时遇到了一些问题,但我后来解决了这个问题并且它运行良好。

我的问题是,当我使用 PreparedStatement.executeBatch() 从 Java 应用程序运行相同的查询时(批处理,因为它可以一次插入多行),我得到一个不同的错误信息:

com.ibm.db2.jcc.am.wn: [jcc][t4][102][10040][3.57.82] Batch failure. The batch was submitted, but at least one exception occurred on an individual member of the batch. Use getNextException() to retrieve the exceptions for specific batched elements. ERRORCODE=-4228, SQLSTATE=null

当我使用 getNextException() 时,我得到以下信息:

com.ibm.db2.jcc.am.co: A NON-ATOMIC INSERT STATEMENT ATTEMPTED TO PROCESS MULTIPLE ROWS OF DATA, BUT ERRORS OCCURRED

错误代码为-4228。

为什么会有这种差异?我希望 Java 应用程序返回与控制台工具相同的错误详细信息,以便我可以在我的 Java 代码中处理这些异常。

例如,如果返回的错误代码=-803,这意味着重复异常,我会处理我的代码进行更新而不是插入,或者如果返回的消息包含一些单词,如“FOREIGN KEY”,我会告诉用户确保查找表等

我在 z/OS 上使用 DB2 版本 10.5.3,DB2 驱动程序版本是:3.65.92

最佳答案

    } 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 (non-db2): " + ex.getErrorCode());
System.out.println("Error msg (non-db2): " + ex.getMessage());
}
ex = ex.getNextException();
}
...
}

上面是一个处理db2异常的例子。同时存在 2 个违规时的输出示例:表 MYSCHEMA.MYTABLE 上的唯一键,其中批量插入,以及父表上的外键。我有意将它分成两部分:

getNextException() 之前:

Error code: -4229

Error msg : [jcc][t4][102][10040][4.19.66] ... getNextException(). ERRORCODE=-4229, SQLSTATE=null

getNextException() 之后:

SQLCODE: -803

MESSAGE: One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "1" constrains table "MYSCHEMA.MYTABLE" from having duplicate values for the index key.. SQLCODE=-803, SQLSTATE=23505, DRIVER=4.19.66

SQLCODE: -530

MESSAGE: The insert or update value of the FOREIGN KEY "MYSCHEMA.MYTABLE.MYTABLE_FK" is not equal to any value of the parent key of the parent table.. SQLCODE=-530, SQLSTATE=23503, DRIVER=4.19.66

关于Java Exception 没有从 db2 控制台返回相同的异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54400878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com