2013-02-22 28 views
1

我有一個mysql存儲過程。如何使用java運行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

你打電話給GetSpecificRecord,但你的proc是GetRecordsByAge – 2013-02-22 07:22:55

+0

你有沒有試過在mysql本身測試sp。你是否得到了預期的結果? Iswanto發現它! – SaK 2013-02-22 07:24:21

回答

4

由於條件WHERE age = Age總是TURE。

參數名稱Age更改爲別的東西:

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

感謝Mahmoud Gamal – user591790 2013-02-22 07:31:12

+0

@ user591790 - 不客氣:) – 2013-02-22 07:31:54

10

爲什麼您得到的所有記錄的原因是因爲列名衝突導致WHERE條款是總是如此。改變,是不是跟你用比較列的名稱相同的參數的名稱,

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

第二個是,你調用不同的存儲過程。而不是GetRecordsByAge,你打電話給GetSpecificRecord

+1

謝謝JW。現在正在工作。 – user591790 2013-02-22 07:30:34

+0

不客氣':D' – 2013-02-22 07:34:03