2017-02-23 53 views
0

Я использую Groovy SQL для выполнения запроса, который добавляет некоторый JSON в массив в моей базе данных Postgres JSONB.Правильный способ использования параметров в Groovy SQL

Когда я запускаю приведенный ниже код, я получаю предупреждение о вводе SQL, предупреждение, которое я получаю, ниже.

In Groovy SQL please do not use quotes around dynamic expressions (which start with $) as this means we cannot use a JDBC PreparedStatement and so is a security hole. Groovy has worked around your mistake but the security hole is still there.

Также я не могу сохранить JSON в моей базе данных, если есть символ 'в моей JSON, я получаю ошибку ниже:

Sql failed to process query unterminated ' character

@Override 
Operation save(Player player) { 
    String json = objectMapper.writeValueAsString(player) 
    Blocking.get { 
     sql.executeUpdate(""" 
      UPDATE site_content 
      SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'players' || '${json}'::jsonb) 
      where id = :id 
      """,id: player.teamId) 
    }.operation() 
} 

Я изменил код это

@Override 
Operation save(Player player) { 
    String json = objectMapper.writeValueAsString(player) 
    Blocking.get { 
     sql.executeUpdate(""" 
      UPDATE site_content 
      SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'players' || ':json'::jsonb) 
      where id = :id 
      """, json: json, id: player.teamId) 
    }.operation() 
} 

Но я получаю ошибку

Detail: Expected JSON value, but found ":". Position: 167

Каков правильный способ размещения динамических параметров в мои запросы Groovy SQL? И должен ли я кодировать JSON, когда отправляю его в запрос? На данный момент, прежде чем я отправлю его из своего приложения React, я делаю JSON.stringfy (json), этого недостаточно?

ответ

1

Не должно быть кавычек вокруг имени привязки.

Использовать :json вместо ':json'.

Первое обязательство, второе - строка, начинающаяся с двоеточия. Таким образом, сообщение об ошибке прямо говорит об этом: невозможно разобрать json-объект из строки ':json'.