我有一个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();

当我打印这个结果集时,它将给出表的所有记录。
问题在哪里?
谢谢

最佳答案

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

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

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

09-30 23:08