在groovy中调用mysql存储过程

时间:2017-08-29 12:44:29

标签: mysql groovy

所以我正在尝试在groovy中执行以下存储过程

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 但没有任何效果。

要解决这个问题的任何想法吗?

1 个答案:

答案 0 :(得分:1)

根据mysql中的documentation字符串可以双引号。

所以实际上你用2个字符串参数调用过程

call proc("string1", "whatever ? ?")
解析此查询后,

mysql将返回0个输入参数,因为您明确指定了存储过程的两个参数。

因此,当数据库看不到它时,为此查询传递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])

因为您必须在'name字符串中管理value转义。

可能是SQL Injection安全问题的代码。

最好重新考虑数据库过程参数,以避免将sql查询作为参数传递。