java - 查询从 Java 层在 DB 中的 Saved Json 中插入新的 json 字符串
问题描述
我们在 DB 中有一列以字符串格式保存 JSON 值,例如:
{"listOfPlaces" : [1,2,3], "segment" : 1}
现在,我们需要从带有 UPDATE Query 的 JAVA 层更新 JSON。例如:我们需要添加
activityId : 1
这里保存在 DB 的 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"+"}"+") "
解决方案
无需字符串操作:
如果该列被定义为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}");
推荐阅读
- spring-boot - 如何从 web.xml 在 weblogic.xml 中引入路径变量?
- c++ - Boost.Beast 限速
- office-js - 在 web 界面中添加位置后调用 enhancedLocation.getAsync() 时,返回一个空列表
- c# - JSON.net 模糊参考 'Newtonsoft.Json.Serialization.Func
' 和 'System.Func - sql - 基于列值的 SELECT 计数
- excel - 如何省略 IF 语句 CountA 条件中的合并行?
- java - 带有 ViewModel 的 RxJava Observable
- java - Java setTimeZone 更改日期
- python-3.x - 选择随机函数
- api - 如何在具有不同内容的soapUI中循环发出请求?