【问题标题】:how to run mysql stored procedure using java如何使用java运行mysql存储过程
【发布时间】:2013-02-07 18:13:59
【问题描述】:

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

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

问题出在哪里?

谢谢

【问题讨论】:

  • 您正在调用 GetSpecificRecord,但您的 proc 是 GetRecordsByAge
  • 您是否尝试过在 mysql 本身中测试 sp。您是否得到了想要的结果?伊斯万托发现了它!

标签: java mysql sql stored-procedures


【解决方案1】:

因为条件WHERE age = Age 始终为真。

把参数名Age改成别的名字:

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

【讨论】:

    【解决方案2】:

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

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

    第二个是,你正在调用不同的存储过程。你打电话给GetSpecificRecord,而不是GetRecordsByAge。

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 1970-01-01
      • 2018-03-24
      • 2023-03-20
      • 2014-02-12
      • 1970-01-01
      • 2020-02-01
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多