我有一个双精度数组字段 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)
这里正确的语法是什么?
1条答案
按热度按时间1l5u6lss1#
如果尝试将集合或数组绑定为命名参数,
NamedParameterJdbcTemplate
将语句中相应的命名参数分解为多个与数组/集合长度匹配的位置参数。这对我们很有用WHERE column IN (:param)
但在这种情况下是行不通的。为了设置一个实际的postgres数组,您必须提供如下参数
java.sql.Array
. 可以使用connection#createarrayof()方法创建其示例。