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 ;

2 つ目は、別のストアド プロシージャを呼び出していることです。の代わりに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 に答える