Я использую 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), этого недостаточно?