2017-01-18 6 views
1

Groovyを使用してデータベースにクエリを実行していますが、クエリは完全に機能していますが、正しいデータを取り戻すことはできますが、端末でこのエラーが発生します。 GroovyのSQLで動的式の引用文Groovy SQL

が、これは我々がJDBC PreparedStatementを使用することはできませんので、セキュリティホールがあることを意味して($で始まる)動的な式 前後に引用符を使用しないでください。 Groovyはあなたの間違いを で回避しましたが、セキュリティホールはまだあります。ここで

私のクエリは、私はそれだけで$ IDまたは

​​

に変更した場合、私は次のようなエラーに

org.postgresql.utilを取得

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

です。 PSQLException:列インデックスが範囲外です: 1、列数:0

+0

あなたは試してみてくださいでした: '' 'sql.firstRow( """ elemは を選択elem @> '{"id":?}' ""、[id]) '' '、' [id]のように指定すると、 ] '' id'の代わりに? – Opal

答えて

3

Positional又はnamedパラメータが適切にグルービーSQLによって処理され、代わりに"'$id'"を使用すべきです。

@Opalは言及してhereを説明するように、あなたはどちらかlistmapとしてあなたのparamsを渡すべきであるとして:

sql.execute "select * from tbl where a=? and b=?", [ 'aa', 'bb' ] 
sql.execute "select * from tbl where a=:first and b=:last", first: 'aa', last: 'bb'