使用NamedParameterJdbcTemplate更新数组字段

时间:2009-11-01 19:39:00

标签: java postgresql jdbc parameterized jdbctemplate

我在表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)

这里的语法是什么?

1 个答案:

答案 0 :(得分:4)

如果您尝试将Collection或数组绑定为命名参数,NamedParameterJdbcTemplate会将语句中相应的命名参数分解为多个与数组/集合长度匹配的位置参数。这对WHERE column IN (:param)语句很有用,但在这种情况下不起作用。

要设置实际的Postgres数组,您必须提供参数java.sql.Array。您可以使用Connection.createArrayOf()方法创建其实例。