Запрос на вставку новой строки json в сохраненный Json в БД из уровня Java

У нас есть один столбец в БД, в котором сохранены значения JSON в формате String, например:

{"listOfPlaces" : [1,2,3], "segment" : 1}

Теперь из слоя JAVA с запросом UPDATE нам нужно обновить JSON. Например: нам нужно добавить

 activityId : 1

здесь в сохраненном JSON БД.

Чтобы мы могли сохранить JSON как:

{"listOfPlaces" : [1,2,3], "segment" : 1, activityId : 1}

Я попытался использовать код, указанный ниже, но не уверен, что он точен или нет.

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue(newFieldName, newFilterCriteriaForAddition.getName());
parameters.addValue(newFieldValue, newFilterCriteriaForAddition.getDefaultValue());
int update = namedParameterJdbcTemplate.update(Constant.SQL_TO_ADD_FILTER_CRITERIA_IN_SAVED_REPORT, parameters);

и запрос:

"UPDATE adv.sav_table SET filter_crtr = LEFT(rpt_filter_crtra, -1)  + "||CONCAT("
+ ",\""
+ ":newFieldName:"+":"+newFieldValue"+"}"+") "
не уверен, что это точно или нет:почему бы тебе просто... не проверить это?
JB Nizet 01.05.2019 09:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
137
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Нет необходимости в манипуляциях со строками:

Если этот столбец определен как jsonb (что и должно быть), вы можете просто объединить новое значение:

update adv.sav_table 
   SET filter_crtr  = filter_crtr || '{"activityId":1}'
where ...;

Это можно сделать с помощью PreparedStatement:

update adv.sav_table 
   SET filter_crtr  = filter_crtr || cast(? as jsonb)
where ...;

А затем с помощью

PreparedStatement pstmt  = connection.prepareStatement("UPDATE ...");
psmt.setString(1, "{\"activityId\":1}");

Вы можете получить текущее обязательное поле из базы данных, которая содержит JSON, и заменить его новым JSON с помощью запроса UPDATE.

и чтобы добавить новую запись в JSON, вы можете попробовать это ->

вар объект = {};

объект = { «1»: «а», «2»: «б» };

объект["3"] = "с";

Нам нужно сделать это по всей таблице в каждой строке. Таким образом, сначала получить этот столбец, а затем добавить новую запись невозможно.

Ayushi jain 01.05.2019 10:45

Другие вопросы по теме