存储过程: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()的返回值赋值给存储过程的一个内部变量呢?
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()的返回值赋值给存储过程的一个内部变量呢?
BEGIN
select UserID from cr_user where UserName=un and UserPassWord=upw;
set result=FOUND_ROWS();
END
程序可以获得到所查的UserID值
BEGIN
select UserID from cr_user where UserName=un and UserPassWord=upw;
set result=FOUND_ROWS();END
但为什么FOUND_ROWS()不像row_count()那样在编辑器里会变蓝呢?
感觉没有这个函数似的,谢谢ACMAIN_CHM 和 wwwwb 的回答