所以我尝试在 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
但没有任何效果。
有什么解决办法吗?
最佳答案
根据 documentation mysql 中的字符串可以用双引号引起来。
所以实际上你正在调用带有 2 个字符串参数的过程
call proc("string1", "whatever ? ?")
解析此查询后,mysql 将返回 0 个输入参数,因为您明确指定了存储过程的两个参数。
所以你有一个错误Parameter index out of range (1 > number of parameters, which is 0).
当数据库看不到它们时为此查询传递 2 个参数时。
你可以这样做:
def parm2 = "insert into table (name, val) VALUES ('$name', '$value')"
str = 'call proc("config", ? )'
sql.call(str, [parm2])
因为您必须管理 '
在您的 name
和 value
字符串中转义。
并且它可能是带有 SQL Injection 的代码安全问题。
最好重新考虑您的数据库过程参数,以避免将 sql 查询作为参数传递。
关于mysql - 在groovy中调用mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939523/