1

我有一个mysql存储过程。

DELIMITER //  
CREATE PROCEDURE GetRecordsByAge(IN Age INT)  
BEGIN 
  SELECT * FROM test1 WHERE age = Age;  
END //  
DELIMITER ;

当我通过 java 运行这个存储过程时,它会给出表的所有记录。

但是,如果我在 select 语句中有条件。为什么会这样?

这是我的代码行:-

CallableStatement cStmt = null;
cStmt = con.prepareCall("{ CALL GetSpecificRecord(?) }");
cStmt.setInt(1, 25);
cStmt.execute();
ResultSet rs1 = cStmt.getResultSet();

当我打印这个结果集时,这将给出表的所有记录。

问题出在哪里?

谢谢

4

2 回答 2

10

您获取所有记录的原因是由于列名冲突导致WHERE子句始终为真。更改与您要比较的列名称不同的参数名称,

DELIMITER //  
CREATE PROCEDURE GetRecordsByAge(IN _Age INT)  
BEGIN 
  SELECT * FROM test1 WHERE age = _Age;  
END //  
DELIMITER ;

第二个是,您正在调用不同的存储过程。而不是GetRecordsByAge,您正在调用GetSpecificRecord

于 2013-02-22T07:22:32.093 回答
4

因为条件WHERE age = Age总是真实的。

将参数名称更改为Age其他名称:

DELIMITER //  
CREATE PROCEDURE GetRecordsByAge(IN AgeParam INT)  
BEGIN 
  SELECT * FROM test1 WHERE age = AgeParam;  
END //  
DELIMITER ;
于 2013-02-22T07:22:24.867 回答