2017-08-29 104 views
1

所以我想在常規調用在MySQL存儲過程常規

str = 'call proc("config", "insert into table (name, val) VALUES (?, ?)"' 
sql.call(str, ['name', 'val']) 

的執行以下存儲過程,但我得到了以下錯誤:

java.sql.SQLException: Parameter index out of range (1 > number of 
parameters, which is 0). 

我的猜測是,由於在第二組引號內的問號沒有找到它們作爲參數。

我嘗試使用命名參數以及?.name:name 但沒有任何工作。

解決此問題的任何想法?根據MySQL的documentation

+0

我不知道查詢是OK,有「間接」或「包容性」可能非法...所以mayby錯誤沒有常規相關 –

+0

同樣的查詢(用明顯的值)的作品,當我直接執行它的數據庫 – Kelrak

+0

你有沒有試過這樣的? ' '{調用...}'' – fsi

回答

1

可以doublequoted。

2串所以實際上你調用程序解析這個查詢,因爲您指定的存儲過程的兩個參數明確將返回0輸入參數後,參數

call proc("string1", "whatever ? ?") 

的MySQL。

所以你傳遞2個參數時,該查詢時,數據庫沒有看到他們有一個錯誤Parameter index out of range (1 > number of parameters, which is 0).

你可以做這樣的事情:

def parm2 = "insert into table (name, val) VALUES ('$name', '$value')" 
str = 'call proc("config", ?)' 
sql.call(str, [parm2]) 
的原因你必須

管理'namevalue字符串逃脫。

,並可能它與SQL Injection安全問題代碼。

不如重新考慮你的數據庫過程參數,避免將SQL查詢作爲參數。

+0

我們已經決定確實做一些其他的事情,而不是最終使用這個過程 – Kelrak