gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:11:13 25 4
gpt4 key购买 nike

所以我尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com