我正在尝试运行一个SQL查询,其中的变量在脚本中的其他地方定义。当查询运行数据库时,它只使用值?
,而不是脚本中前面定义为字符串的预期值。
我大概是这样想的:
def quickFilterQuery = """
SELECT "NAME","QUERY","RAPID_VIEW_ID" from "AO_60DB71_QUICKFILTER" WHERE "QUERY" like '%${CUSTOM_FIELD_NAME}%';
"""
log.warn "QF results: $quickFilterQuery"
...
try {
StringBuffer slr = new StringBuffer()
sql.eachRow(quickFilterQuery) { it ->
结果是:
WARN [runner.ScriptBindingsManager]: QF results:
SELECT "NAME","QUERY","RAPID_VIEW_ID" from "AO_60DB71_QUICKFILTER" WHERE "QUERY" like '%Ontology%';
WARN [sql.Sql]: Found 0 parameter placeholders but supplied with 1 parameters
WARN [sql.Sql]: Failed to execute:
SELECT "NAME","QUERY","RAPID_VIEW_ID" from "AO_60DB71_QUICKFILTER" WHERE "QUERY" like '%?%';
日志记录正确捕获了变量 * 应该 * 是什么,但查询错误似乎没有正确使用变量。
当我没有使用变量(只是字符串)时,查询就像预期的那样工作。我假设我的格式设置是关闭的,但是我一辈子都找不到问题所在。
1条答案
按热度按时间8wigbo561#
第1版
在执行quickFilterQuery之前将其转换为字符串。此方法存在SQL注入问题-如果CUSTOM_FIELD_NAME包含引号
'
字符,则此方法将不起作用第二版
一个更好的方法保持quickFilterQuery作为GSteing -所以,准备好的语句(带?)用于执行和传递查询参数。
您必须删除${CUSTOM_FIELD_NAME}前后的引号