mysql里创建了一个带OUT类型参数的存储过程。
create procedure test(in a varchar(20),out b int) select a;JAVA里写:
...
rs=st.executeQuery("use db_test;");
CallableStatement cs=con.prepareCall("call test(?,?);");
cs.setString(1,"yusiyu");
cs.registerOutParameter(2,java.sql.Types.INTEGER);
cs.execute();执行后页面提示英文错位,:Parameter number 2 is not an OUT parameter
大概是说2号参数不是OUT类型?
我存储过程写错了吗?

解决方案 »

  1.   

    你声明的是int类型的,但下面使用却是Integer类类型,程序认为他不是设置的同一个参数
      

  2.   

    那时怎么改的呢?下面这个表也是说int对应integer
    MySQL 对应  java.sql.Types 
    bigint           bigint 
    tinyblob         binary 
    bit              bit 
    enum,set,char    char 
    date,year        date 
    decimal,numeric  decimal 
    double,real      double 
    mediumint,int    integer 
    blob,mediumblob  blob 
      

  3.   

    create procedure test(in a varchar(20),out b int) select a;你这个存储过程没有返回值的。
      

  4.   

    mysql> CREATE PROCEDURE HelloWorld2(    ->   IN vUserName VARCHAR(10),    ->   OUT vOutValue VARCHAR(10),    ->   INOUT vInOutValue VARCHAR(10))    -> BEGIN    ->   SELECT CONCAT('Hello ', vUserName);    ->   SET vOutValue = 'A';    ->   SET vInOutValue = 'B';    -> END
    在存储过程里需要指定返回b的值!
      

  5.   

    老大按你的存储过程写了个测试还是一样的错误呢?(取消了INOUT vInOutValue VARCHAR(10))mysql:
    mysql> create procedure helloworld(
        -> in vusername varchar(10),
        -> out voutvalue varchar(10))
        -> begin
        -> select concat('hello',vusername);
        -> set voutvalue='A';
        -> end//java:
             st=con.createStatement();
             rs=st.executeQuery("use db_test;");
             CallableStatement cs=con.prepareCall("{call helloworld(?,?)}");
             cs.setString(1,"hello");
             cs.registerOutParameter(2,Types.VARCHAR);
             cs.execute();
    浏览器还是提示错误:Parameter number 2 is not an OUT parameter