求救java调用有返回值得存储过程,帮忙来看(100分相赠)不够再加

sunatteda 2004-11-22 03:09:01
我想在程序执行的时候out 变量是否也要输进去
但是报错:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0100E 参数数目错误。 SQLSTATE=07001
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:254)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:197)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(SQLExceptionGenerator.java:436)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(DB2PreparedStatement.java:1186)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(DB2PreparedStatement.java:778)
at TestPrcedure.main(TestPrcedure.java:36)


存储过程如下:
CREATE PROCEDURE aa (
in id varchar(8),
in dd varchar(16),
out intNo integer,
out intArtl integer)
LANGUAGE SQL
P1: BEGIN
declare intRtnVal integer;
。。。。。。
return intRtnVal;
END P1

代码如下:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
//import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class TestPrcedure {

public static void main(String[] args) {
try{
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection db2Conn =
DriverManager.getConnection
("jdbc:db2:sddata","db2admin","admin");
String strSQL = "{? = call DB2ADMIN.COMMPOST (?,?,?,?)}";
db2Conn.setAutoCommit(false);
CallableStatement sqlstmt = db2Conn.prepareCall(strSQL);
sqlstmt.registerOutParameter(4,Types.INTEGER);
sqlstmt.setString(1,"20041114");
sqlstmt.setString(2,"20041214");
sqlstmt.setInt(3,23);
sqlstmt.setInt(4,34);

int i = sqlstmt.executeUpdate();
System.out.println(i);
System.out.println(sqlstmt.getInt(4));
sqlstmt.close();

}catch(ClassNotFoundException cnfe){
cnfe.printStackTrace();
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(RuntimeException ret){
ret.printStackTrace();
}
}
}
...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3560/3560232.xml?temp=.3340265
还有这里
http://community.csdn.net/Expert/TopicView.asp?id=3531862
pliner 2004-11-22
  • 打赏
  • 举报
回复
...... -_-!! 分呢,分呢,谁给我??????
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
呵呵……那我一会还得去书店看看书去,不过也谢谢你了,看看我没有接的帖子,都是没有人回答的,你可以去那里领分!
pliner 2004-11-22
  • 打赏
  • 举报
回复
据在下拙见,是的
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
to:pliner(pliner)
其中1是位置,第二个是返回的类型
不明白举例一下吧
sqlstmt.registerOutParameter(1,Types.INTEGER);
这个是否是我的存储过程的返回值呢 return intRtnVal;?
虚心请教!

pliner 2004-11-22
  • 打赏
  • 举报
回复
其中1是位置,第二个是返回的类型
当然是按问号的顺序来依次类推
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
to:pliner(pliner) 你没有明白我的意思,也不知道是我没有写清楚吧
我的存储过程中是有有返回值得 return intRtnVal;
另外存储过程中 还有两个输出值,但是现在我不用输出值 我只想得到返回值,该如何做
另外看看下面的帮助我理解一下

sqlstmt.registerOutParameter(4,Types.INTEGER);
我现在通过了我做了一下修改:
sqlstmt.registerOutParameter(1,Types.INTEGER);
sqlstmt.setString(2,"20041114");
sqlstmt.setString(3,"20041214");
sqlstmt.setInt(4,23);
sqlstmt.setInt(5,34)
sqlstmt.execute();
System.out.println(sqlstmt.getInt(1));

输出没有报错,输出为0 请教 sqlstmt.registerOutParameter(1,Types.INTEGER);
里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
谢谢再次解答
分数不够可以再加
pliner 2004-11-22
  • 打赏
  • 举报
回复
你改为:

String strSQL = "{call aa(?,?,?,?)}";
db2Conn.setAutoCommit(false);
CallableStatement sqlstmt = db2Conn.prepareCall(strSQL);
sqlstmt.setString(1,"20041114");
sqlstmt.setString(2,"20041214");
sqlstmt.registerOutParameter(3,java.sql.Types.INTEGER);
sqlstmt.registerOutParameter(4,java.sql.Types.INTEGER);
sqlstmt.executeUpdate();

int i=sqlstmt.getInt(3);
int j=sqlstmt.getInt(4);

这是偶调用oracle的,你可以看一下

pstmt = conn.prepareCall("{call salesControl(?,?,?)}");
pstmt.setString(1, flag);
pstmt.registerOutParameter(2,java.sql.Types.INTEGER);
pstmt.registerOutParameter(3,java.sql.Types.VARCHAR);
pstmt.execute();

isOK=pstmt.getInt(2);
title=pstmt.getString(3);
1是输入,2,3是输出.
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
sqlstmt.registerOutParameter(4,Types.INTEGER);
我现在通过了我做了一下修改:
sqlstmt.registerOutParameter(1,Types.INTEGER);
sqlstmt.setString(2,"20041114");
sqlstmt.setString(3,"20041214");
sqlstmt.setInt(4,23);
sqlstmt.setInt(5,34)
sqlstmt.execute();
System.out.println(sqlstmt.getInt(1));

输出没有报错,输出为0 请教 sqlstmt.registerOutParameter(1,Types.INTEGER);
里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
谢谢再次解答
分数不够可以再加
jFresH_MaN 2004-11-22
  • 打赏
  • 举报
回复
setString()的时候是既要输入in参数也要输入out参数
sunatteda 2004-11-22
  • 打赏
  • 举报
回复
我想在程序执行的时候out 变量是否也要输进去
但是报错:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0100E 参数数目错误。 SQLSTATE=07001
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:254)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:197)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(SQLExceptionGenerator.java:436)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(DB2PreparedStatement.java:1186)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(DB2PreparedStatement.java:778)
at TestPrcedure.main(TestPrcedure.java:36)


存储过程如下:
CREATE PROCEDURE aa (
in id varchar(8),
in dd varchar(16),
out intNo integer,
out intArtl integer)
LANGUAGE SQL
P1: BEGIN
declare intRtnVal integer;
。。。。。。
return intRtnVal;
END P1

代码如下:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
//import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class TestPrcedure {

public static void main(String[] args) {
try{
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection db2Conn =
DriverManager.getConnection
("jdbc:db2:sddata","db2admin","admin");
String strSQL = "{? = call aa(?,?,?,?)}";
db2Conn.setAutoCommit(false);
CallableStatement sqlstmt = db2Conn.prepareCall(strSQL);
sqlstmt.registerOutParameter(4,Types.INTEGER);
sqlstmt.setString(1,"20041114");
sqlstmt.setString(2,"20041214");
sqlstmt.setInt(3,23);
sqlstmt.setInt(4,34);

int i = sqlstmt.executeUpdate();
System.out.println(i);
System.out.println(sqlstmt.getInt(4));
sqlstmt.close();

}catch(ClassNotFoundException cnfe){
cnfe.printStackTrace();
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(RuntimeException ret){
ret.printStackTrace();
}
}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧