我在表dblArrayFld
中有一个双精度数组字段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)
这里的语法是什么?
答案 0 :(得分:4)
如果您尝试将Collection或数组绑定为命名参数,NamedParameterJdbcTemplate
会将语句中相应的命名参数分解为多个与数组/集合长度匹配的位置参数。这对WHERE column IN (:param)
语句很有用,但在这种情况下不起作用。
要设置实际的Postgres数组,您必须提供参数java.sql.Array
。您可以使用Connection.createArrayOf()方法创建其实例。