使用namedparameterjdbctemplate更新数组字段

mnemlml8  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(303)

我有一个双精度数组字段 dblArrayFld 在table上 myTable 我想用spring的 NamedParameterJdbcTemplate (我用的是postgres)。
我运行的代码如下:

SqlParameterSource params = (new MapSqlParameterSource())
        .addValue("myarray", myDblArrayListVar)
        .addValue("myid", 123);

namedJdbcTemplate.update("UPDATE myTable SET dblArrayFld = :myarray WHERE idFld = :myid", params);

这将返回一个在“$2”处或附近读取语法错误的错误
我假设我的语法是:myarray在这里是错误的。我也试过包围 :myarray 通过以下方式: dblArrayFld={:myarray} dblArrayFld={ :myarray } dblArrayFld=[:myarray] dblArrayFld=ARRAY[:myarray] dblArrayFld=(:myarray) 这里正确的语法是什么?

1l5u6lss

1l5u6lss1#

如果尝试将集合或数组绑定为命名参数, NamedParameterJdbcTemplate 将语句中相应的命名参数分解为多个与数组/集合长度匹配的位置参数。这对我们很有用 WHERE column IN (:param) 但在这种情况下是行不通的。
为了设置一个实际的postgres数组,您必须提供如下参数 java.sql.Array . 可以使用connection#createarrayof()方法创建其示例。

相关问题