我有一个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
子句始终为真。更改与您正在比较的列名称不同的参数名称,
DELIMITER //
CREATE PROCEDURE GetRecordsByAge(IN _Age INT)
BEGIN
SELECT * FROM test1 WHERE age = _Age;
END //
DELIMITER ;
第二个是,您正在调用不同的存储过程。您调用的不是 GetRecordsByAge
,而是 GetSpecificRecord
。
关于java - 如何使用java运行mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018908/