mysql - 在groovy中调用mysql存储过程

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

有什么解决办法吗?

最佳答案

根据 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])

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

并且它可能是带有 SQL Injection 的代码安全问题。

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

关于mysql - 在groovy中调用mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939523/

相关文章:

groovy - 每个 Grails 索引

database - 在使用 Grails 作为框架时尝试查看 H2 数据库中的表

php - 添加新 session 产品 - PHP

php - 按最高或最低值选择不同

mysql:反转 LIKE '%foo' 的内容列 - 好的做法?

logging - 无法识别 log4j2 配置文件

groovy - Gradle项目依赖项-作为共享项目还是JAR?

asp.net - asp.net连接字符串问题

php - 是否可以向 MySQL 中的文本添加更多文本?

regex - Groovy 字符串替换