我有一个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();
当我打印此结果集时,这将给出该表的所有记录。
问题出在哪里?
由于
答案 0 :(得分:10)
您获取所有记录的原因是列名冲突导致WHERE
子句始终为true。更改与您要比较的列的名称不相同的参数名称,
DELIMITER //
CREATE PROCEDURE GetRecordsByAge(IN _Age INT)
BEGIN
SELECT * FROM test1 WHERE age = _Age;
END //
DELIMITER ;
第二个是,您正在调用不同的存储过程。而不是GetRecordsByAge
,而是致电GetSpecificRecord
。
答案 1 :(得分:4)
因为条件WHERE age = Age
始终是真的。
将参数名称Age
更改为其他内容:
DELIMITER //
CREATE PROCEDURE GetRecordsByAge(IN AgeParam INT)
BEGIN
SELECT * FROM test1 WHERE age = AgeParam;
END //
DELIMITER ;