CallableStatement cstmt = conn.prepareCall("{call ValidateUser(?, ?, ?,?)}");
cstmt .registerOutParameter(4,java.sql.Types.INTEGER);
cstmt .setInt(1,int1);
cstmt .setString(2,s1);
cstmt .setString(3,s1);
cstmt .registerOutParameter(4,java.sql.Types.INTEGER);
cstmt .setInt(1,int1);
cstmt .setString(2,s1);
cstmt .setString(3,s1);
我照着做了,cstmt.execute()报错:为存储过程指定的参数过多!
cstmt.registerOutParameter(4, java.sql.Types.INTEGER);
cstmt.setInt(1, uID);
cstmt.setString(2, nickname);
cstmt.setString(3, pwd);
System.out.print("Prepared sp \n");
cstmt.execute();
System.out.print("Excuted sp \n"); userID = cstmt.getInt(4);
System.out.print("Got INT(4) \n");//OUTPUT:preared sp
ms sql server exception: 为存储过程validateuser指定的参数过多!
就是你create……
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(1, uID);
cstmt.setString(2, nickname);
cstmt.setString(3, pwd);
System.out.print("Prepared sp \n");
cstmt.execute();
System.out.print("Excuted sp \n"); userID = cstmt.getInt(1);
System.out.print("Got INT(1) \n");
是不是你输出参数和第一个输入参数是inout的
如果这样 呢试着用上面的看看!
@UID int,
@LoginName varchar(32),
@chvPassword varchar(16)
as
从查询分析器看,参数的顺序是:
output:int
input:int
input:varchar
input:varchar
我也试着把第一个参数当作输出值,错误是一样的
形式参数@uid定义为output,但实际参数并没有申明为OUTPUT。 而且我也试过了,这3个input参数中任意一个被注册为输出参数时,都会有这样的异常。
如果申明了4个参数,当我注册第一、第四个参数为输出时,都抛出参数太多的异常。
我很迷惑,希望各位大哥帮帮忙。
CallableStatement cstmt = conn.prepareCall("{call ValidateUser(?, ?, ?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(1, uID);
cstmt.setString(2, nickname);
cstmt.setString(3, pwd);
System.out.print("Prepared sp \n");
cstmt.execute();
这样试试会不会刚刚多了一个?
ResultSet rs=cstmt.getResultSet();
if(rs!=null){
while(rs.next()){
System.out.println(rs.getString(1));
}
}
CallableStatement cstmt = conn.prepareCall("{call ValidateUser(?, ?, ?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(1, uID);
cstmt.setString(2, nickname);
cstmt.setString(3, pwd);
cstmt.execute();
2、根据这个SP的名字,应当是没有结果集返回的,只是判断用户是否有效,输出在第一个inout参数里(比如返回0代表无效的账号,其它值就是代表当前合法账号了)
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(2, uID);
cstmt.setString(3, nickname);
cstmt.setString(4, pwd);
System.out.print("Prepared sp \n");
cstmt.execute();应该是这样吧
http://expert.csdn.net/Expert/topic/1152/1152015.xml?temp=.0257532