为了账号安全,请及时绑定邮箱和手机立即绑定

查询从 Java 层在 DB 中的 Saved Json 中插入新的 json 字符串

查询从 Java 层在 DB 中的 Saved Json 中插入新的 json 字符串

繁华开满天机 2022-11-02 17:08:07
我们在 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"+"}"+") "
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

无需字符串操作:


如果该列被定义为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}");


查看完整回答
反对 回复 2022-11-02
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可以从包含 JSON 的数据库中获取当前必填字段,并通过 UPDATE 查询将其替换为新的 JSON

并在 JSON 中添加新条目,您可以尝试这种方式 ->

变量 obj = {};

obj = { "1": "a", "2": "b" };

obj["3"] = "c";


查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信