java调用存储过程遇到的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 18:54:58
调用本机Oracle内的存储过程时,总是没有结果显示,因为老提示问题补充说明过长,具体代码我帖在个人空间里了,希望有人帮忙看下到底是啥问题。
关键部分代码如下:
System.out.println("connection success~");
conn.setAutoCommit(false);
CallableStatement cs = conn
.prepareCall("{call procedure_2(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
cs.setString("matnr_in", matnr_in);
cs.setString("werks_in", werks_in);
cs.registerOutParameter("matnr", java.sql.Types.CHAR);
cs.registerOutParameter("werks", java.sql.Types.CHAR);
cs.registerOutParameter("maktx", java.sql.Types.CHAR);
cs.registerOutParameter("menge", java.sql.Types.CHAR);
cs.registerOutParameter("dmbtr", java.sql.Types.CHAR);
cs.registerOutParameter("budat", java.sql.Types.CHAR);
cs.registerOutParameter("labst", java.sql.Types.CHAR);
cs.registerOutParameter("insme", java.sql.Types.

你的存储过程真复杂= =

存储过程自己在pl/sql中测试好用么?你先测试看看

7 - CallableStatement
本概述是从《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》这本书中摘引来的。JavaSoft 目前正在准备这本书。这本书是一本教程,同时也是 JDBC 的重要参考手册,它将作为 Java 系列的组成部份在 1997 年春季由 Addison-Wesley 出版公司出版。

7.1 概述
CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement 对象所含的内容。这种调用是用一种换码语法来写的,有两种形式:一种形式带结果参数,另一种形式不带结果参数(有关换码语法的信息,参见第 4 节“语句”)。结果参数是一种输出 (OUT) 参数,是已储存过程的返回值。两种形式都可带有数量可变的输入(IN 参数)、输出(OUT 参数)或输入和输出(INOUT 参数)的参数。问号将用作参数的占位符。

在 JDBC 中调用已储存过程的语法如下所示。注意,方括号表示其间的内容是可选项;方括号本身并不是语法的组成部份。

{call 过程名[(?, ?, ...)]}

返回结果参数的过程的语法为:

{? = call 过程名[(?, ?, ...)]}

不带参数的已储存过程的语法类似:

{call 过程名}

通常,创建 CallableStatement 对象的人应当知道所用的 DBMS 是支持已储存过程的,并且知道这些过程都是些什么。然而,如果需要检查,多种 DatabaseMetaData 方法都可以提供这样的信息。例如,如果 DBMS 支持已储存过程的调用,则 supportsStoredProcedures 方法将返回 true,而 getProcedures 方法将返回对已储存过程的描述。

Ca