存储过程:CREATE DEFINER=`root`@`localhost` PROCEDURE `p_cr_checkuserlogin`(in un varchar(20),in upw varchar(20),out result tinyint)
BEGIN
    select UserID from cr_user where UserName=un and UserPassWord=upw;
    set result=row_count();
ENDjava调用的代码:public int selUserID(String UserName,String UserPassWord){
int Result=0;
ConnectMySql cms=new ConnectMySql();
conn = cms.getConnection();
try {
cstmt=conn.prepareCall("{call p_cr_checkuserlogin(?,?,?)}");
cstmt.setString(1, UserName);
cstmt.setString(2, UserPassWord);
cstmt.registerOutParameter(3, Types.TINYINT);
cstmt.execute();
Result=cstmt.getInt(3);
if (rs != null)
rs.close();
if (cstmt != null)
cstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
// TODO: handle exception
}
return Result;
}我调用的时候所传参数是绝对可以查出结果的,所以row_count()应该是1
在网上查了下,说是prepare,execute会另开一个线程,而mysql的很多东西是跟线程相关的。这样的话就会导致row_count()函数的返回值丢失。
解决方法:在execute之后,DEALLOCATE之前把row_count()的返回值赋值给存储过程的一个内部变量中。
不太理解,在哪将row_count()的返回值赋值给存储过程的一个内部变量呢?

解决方案 »

  1.   

    先不在你的java中,直接到mysql中试一下你的这个`p_cr_checkuserlogin` 过程,看返回是什么。 以断定问题在mysql上还是java的联接上。
      

  2.   

    ROW_COUNT() ROW_COUNT() returns the number of rows updated, inserted, or deleted by the preceding statement. 
      

  3.   

    你的`p_cr_checkuserlogin` 中只有select 没有 update,insert,delete 不会影响到ROW_COUNT() 的,应该改为FOUND_ROWS()CREATE DEFINER=`root`@`localhost` PROCEDURE `p_cr_checkuserlogin`(in un varchar(20),in upw varchar(20),out result tinyint)
    BEGIN
        select UserID from cr_user where UserName=un and UserPassWord=upw;
        set result=FOUND_ROWS();
    END
      

  4.   

    恩,谢谢回答,连是连上了,因为如果这么写的话select UserID from cr_user where UserName=un and UserPassWord=upw;
    程序可以获得到所查的UserID值
      

  5.   

    CREATE DEFINER=`root`@`localhost` PROCEDURE `p_cr_checkuserlogin`(in un varchar(20),in upw varchar(20),out result tinyint)
    BEGIN
        select UserID from cr_user where UserName=un and UserPassWord=upw;
        set result=FOUND_ROWS();END
      

  6.   

    果然,改成FOUND_ROWS()就好了
    但为什么FOUND_ROWS()不像row_count()那样在编辑器里会变蓝呢?
    感觉没有这个函数似的,谢谢ACMAIN_CHM 和 wwwwb 的回答