2

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)

这里的正确语法是什么?

4

1 回答 1

6

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

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

于 2009-11-01T21:44:42.573 回答