【发布时间】:2025-12-20 19:35:16
【问题描述】:
我正在调用一个 DB2 SQL 存储过程(在大型机中),其中 CLOB 数据类型作为 out 参数以及其他参数。
CREATE PROCEDURE ACT_GETAUDIT01
(
IN IN_ID CHAR(12) FOR SBCS DATA CCSID EBCDIC
,IN IN_CURSOR_ID INTEGER
,IN IN_PAGING_TS CHAR(26) FOR SBCS DATA CCSID EBCDIC
,OUT OUT_AUDTDATA CLOB FOR SBCS DATA CCSID EBCDIC
)
LANGUAGE SQL
READS SQL DATA
从 JAVA 调用此存储过程时,execute() 语句中出现以下异常。
CallableStatement cs = conn.prepareCall(callstmt);
boolean resultsavailable = cs.execute();
线程“main”java.lang.IllegalArgumentException 中的异常:负初始大小:-5
在 java.io.ByteArrayOutputStream.(未知来源)
在 com.ibm.db2.jcc.b.ba.a(ba.java:780)
在 com.ibm.db2.jcc.b.bd.d(bd.java:1961)
在 com.ibm.db2.jcc.b.bd.l(bd.java:378)
在 com.ibm.db2.jcc.b.bd.e(bd.java:91)
在 com.ibm.db2.jcc.b.r.e(r.java:108)
在 com.ibm.db2.jcc.b.bs.i(bs.java:191)
在 com.ibm.db2.jcc.c.cw.o(cw.java:1213)
在 com.ibm.db2.jcc.c.cx.d(cx.java:2061)
在 com.ibm.db2.jcc.c.cy.bq(cy.java:145)
在 com.ibm.db2.jcc.c.cy.execute(cy.java:128)
当我使用VARCHAR 而不是 CLOB 时,一切似乎都运行良好。我也已经正确注册了输出参数。非常感谢任何帮助
【问题讨论】:
-
我没有在 DB2 上工作过。如何指定 CLOB out 变量的大小?
-
感谢 shahkalpesh。我尝试给 OUT OUT_AUDTDATA CLOB(5000) FOR SBCS DATA CCSID EBCDIC 。但是我又遇到了同样的错误
-
从异常中,我只能解释当 Clob 正在由 DB2 驱动程序类方法处理时,负索引会阻止它提取数据。我仔细检查了存储过程以及调用 java 模块是否设置了任何负值。但他们很干净。有人可以告诉我我的分析中是否遗漏了什么
-
问题是我的 DB2 JDBC jarfile 已经过时。现在我在 Eclipse 中为我的项目添加了更新的 jar 文件(与我正在运行的 db2 版本匹配),它运行良好。 DB2 版本及其对应的 JDBC jar 文件请参考www-01.ibm.com/support/docview.wss?uid=swg21363866。
-
试着给我们一个完整的答案,因为看起来你解决了问题