关于动态表达式Groovy SQL的引用

时间:2017-01-18 12:50:57

标签: mysql postgresql groovy

我正在使用Groovy对我的数据库进行查询,查询工作正常并带回正确的数据,但我在终端中收到此错误。

  

在Groovy SQL中,请不要在动态表达式周围使用引号   (以$开头)因为这意味着我们不能使用JDBC   PreparedStatement等是一个安全漏洞。 Groovy一直在努力   你的错误,但安全漏洞仍在那里。

这是我的查询

sql.firstRow("""select elem
                        from site_content,
                        lateral jsonb_array_elements(content->'playersContainer'->'series') elem
                        where elem @> '{"id": "${id}"}'
                     """)

如果我将其更改为$ id或

sql.firstRow("""select elem
                        from site_content,
                        lateral jsonb_array_elements(content->'playersContainer'->'series') elem
                        where elem @> '{"id": ?}'
                     """, id)

我收到以下错误

  

org.postgresql.util.PSQLException:列索引超出范围:   1,列数:0。

1 个答案:

答案 0 :(得分:4)

Positionalnamed参数由groovy sql正确处理,应该使用而不是"'$id'"

正如@Opal所提到的那样here,你应该以{{1​​}}或list传递你的参数:

map