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);

解决方案 »

  1.   

    注册后取返回值 String rval = cstmt.getInt(4);
      

  2.   

    to xmvigour(微电--有狼的气质 没狼的勇气 真郁闷):
    我照着做了,cstmt.execute()报错:为存储过程指定的参数过多!
      

  3.   

    CallableStatement cstmt = conn.prepareCall("{call ValidateUser(?, ?, ?, ?)}");
          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指定的参数过多!
      

  4.   

    你的存储过程的头部定义贴出来一下 
    就是你create……
      

  5.   

    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();
          System.out.print("Excuted sp \n");      userID = cstmt.getInt(1);
          System.out.print("Got INT(1) \n");
    是不是你输出参数和第一个输入参数是inout的
    如果这样 呢试着用上面的看看!
      

  6.   

    create procedure [dbo].[ValidateUser]
    @UID int,  
    @LoginName varchar(32), 
    @chvPassword varchar(16) 
    as
    从查询分析器看,参数的顺序是:
    output:int
    input:int
    input:varchar
    input:varchar
    我也试着把第一个参数当作输出值,错误是一样的
      

  7.   

    如果按你上面的做法,抛出的异常是:
    形式参数@uid定义为output,但实际参数并没有申明为OUTPUT。            而且我也试过了,这3个input参数中任意一个被注册为输出参数时,都会有这样的异常。
    如果申明了4个参数,当我注册第一、第四个参数为输出时,都抛出参数太多的异常。
    我很迷惑,希望各位大哥帮帮忙。
      

  8.   

    按你的写法 没output的值的参数
    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();
    这样试试会不会刚刚多了一个?
      

  9.   

    cstmt.execute();
    ResultSet rs=cstmt.getResultSet();
    if(rs!=null){
     while(rs.next()){
       System.out.println(rs.getString(1));
     }
    }
      

  10.   

    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代表无效的账号,其它值就是代表当前合法账号了)
      

  11.   

    CallableStatement cstmt = conn.prepareCall("{? = call ValidateUser(?, ?, ?)}");
          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();应该是这样吧
      

  12.   

    to bluevagrant(蓝色浪人) ( ) :真乃神人也,按你说的做,果然成功了,痛快,痛快!开帖请领分!
    http://expert.csdn.net/Expert/topic/1152/1152015.xml?temp=.0257532