我想在程序执行的时候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();
}
}
}
但是报错:
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();
}
}
}
解决方案 »
- java.lang.NoClassDefFoundError: org/jdom/Content
- hibenate search 过滤器的问题
- 请问tomcat ssl配置的问题
- [求助]下了个hibernate的源码,找不到org.hibernate.hql.antlr这个包
- ssh用ajax传实体类参数不成功
- tomcat下的编译错误,答出散分!!
- 关于struts的一个简单的问题,请教高手。
- Struts1.1例子,启动服务不成功!大虾帮忙!
- 怎样编写struts和配置服务器运行..
- Norwaywoods请来,刚才分太少,追加给分 谢谢
- ██急██Struts超怪问题████同一jsp页面,我在Struts中Forward跳转的和直接打开的不一致是为什么呢?
- 急问!!!!!!来者有分!!!!!!!!!!
我现在通过了我做了一下修改:
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);
里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
谢谢再次解答
分数不够可以再加
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是输出.
我的存储过程中是有有返回值得 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);
里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
谢谢再次解答
分数不够可以再加
其中1是位置,第二个是返回的类型
不明白举例一下吧
sqlstmt.registerOutParameter(1,Types.INTEGER);
这个是否是我的存储过程的返回值呢 return intRtnVal;?
虚心请教!
还有这里
http://community.csdn.net/Expert/TopicView.asp?id=3531862