Java JDBC executeUpdate arraycopy:长度-1434为负值。

问题描述 投票:-1回答:1

我在DB2中调用存储过程时遇到了问题。如果我不使用java运行它,它就能正常工作。谁能帮我解决这个问题?这个问题不取决于消息变量,我不知道它有什么问题。

下面是代码。

CallableStatement cstmt = con.prepareCall("call tb.proc(?,?,?,?, ?)");
        cstmt.setString(1, message);
        cstmt.registerOutParameter(2, Types.VARCHAR);
        cstmt.registerOutParameter(3, Types.VARCHAR);
        cstmt.registerOutParameter(4, Types.INTEGER);
        cstmt.registerOutParameter(5, Types.CHAR);
        cstmt.executeUpdate();

SP定义,按照要求,这个调用其他存储过程。

CREATE PROCEDURE tb.proc (IN MESSAGE VARCHAR(300), OUT RESPONSE VARCHAR(300), OUT RESPMESSAGE VARCHAR(300), OUT E INTEGER,  OUT ESTATE CHAR(5))

BEGIN

    DECLARE varCode VARCHAR(300);
    DECLARE varUPD_SID VARCHAR(300);
    DECLARE varP_ZAPR VARCHAR(300);
    DECLARE varDATE_PLREM VARCHAR(300);
    DECLARE varDATE_PLSP VARCHAR(300);
    DECLARE varP_XAR VARCHAR(300);
    DECLARE varUPD_TIME VARCHAR(300);
    DECLARE varUPD_USER VARCHAR(300);
    DECLARE varOperation VARCHAR(300);
    DECLARE varNINV VARCHAR(300);
    DECLARE SQLCODE INTEGER;
    DECLARE SQLSTATE CHAR(5);

    DECLARE ErrorCode CHAR(5) DEFAULT NULL;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
        BEGIN
        SET E = SQLCODE, ESTATE = SQLSTATE;
        END;

    CALL TB.SPLITMESSAGE(MESSAGE, varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp,  varP_Xar);
    CALL TB.VALIDATEFORMAT(varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp,  varP_Xar, ErrorCode);
    IF ErrorCode IS NULL
        THEN
            CALL TB.VALIDATEFIELDS(varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp,  varP_Xar, ErrorCode);
    END IF;

    CALL TB.PROC2(Message, varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp,  varP_Xar, ErrorCode,
                            RESPONSE, RESPMESSAGE);

END 

这就是错误的地方

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: length -1434 is negative
    at java.base/java.lang.System.arraycopy(Native Method)
    at com.ibm.db2.jcc.t4.x.a(x.java:102)
    at com.ibm.db2.jcc.t4.x.a(x.java:150)
    at com.ibm.db2.jcc.uw.UWReply.b(UWReply.java:62)
    at com.ibm.db2.jcc.t4.x.c(x.java:360)
    at com.ibm.db2.jcc.t4.x.d(x.java:375)
    at com.ibm.db2.jcc.t4.x.f(x.java:646)
    at com.ibm.db2.jcc.t4.y.ic(y.java:4622)
    at com.ibm.db2.jcc.t4.y.hc(y.java:4607)
    at com.ibm.db2.jcc.t4.ab.c(ab.java:3031)
    at com.ibm.db2.jcc.t4.ab.b(ab.java:3021)
    at com.ibm.db2.jcc.t4.ab.b(ab.java:2911)
    at com.ibm.db2.jcc.t4.ab.a(ab.java:2767)
    at com.ibm.db2.jcc.t4.ab.b(ab.java:2692)
    at com.ibm.db2.jcc.t4.ab.a(ab.java:2606)
    at com.ibm.db2.jcc.t4.ab.a(ab.java:173)
    at com.ibm.db2.jcc.t4.ab.b(ab.java:84)
    at com.ibm.db2.jcc.t4.p.b(p.java:69)
    at com.ibm.db2.jcc.t4.rb.c(rb.java:244)
    at com.ibm.db2.jcc.am.po.rc(po.java:3520)
    at com.ibm.db2.jcc.am.po.wc(po.java:3644)
    at com.ibm.db2.jcc.am.po.b(po.java:4421)
    at com.ibm.db2.jcc.am.CallableStatement.ic(CallableStatement.java:194)
    at com.ibm.db2.jcc.am.CallableStatement.executeUpdate(CallableStatement.java:173)
java db2-luw
1个回答
0
投票

这看起来是一个 已知问题 - 你需要升级到最新的DB2 JDBC驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.