java - Java JDBC executeUpdate arraycopy:长度-1434为负
问题描述
我在 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)
解决方案
这看起来是一个已知问题——您需要升级到最新的 DB2 JDBC 驱动程序。
推荐阅读
- python - 有没有办法将联想笔记本电脑通知连接到 Python 脚本,以便将通知推送到另一台设备?
- phpmyadmin - phpmyadmin 分组或堆叠标题
- node.js - Docker 桌面和节点 Postgres 连接问题
- vue.js - 如何在 App.vue 中使用 vue v-if - 但在组件中使用切换按钮?
- r - 我怎样才能让 ShinyApp 调用一个模块,而后者又调用另一个模块?
- tableau-api - Tableau:使用 tabcmd 发布“仅仪表板”
- jenkins - npm publish 未使用私有 aws 代码工件存储库
- r - 如何覆盖收敛错误/警告以查看 R 中 lmer 中的模型输出
- amazon-web-services - 如何为 AWS Websocket API Gateway 添加自定义域?
- powershell - PowerShell - 日期时间格式更改