Используйте NamedParameterJdbcTemplate для обновления поля массива - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть поле массива двойной точности dblArrayFld в таблице myTable, и я хотел бы обновить его, используя NamedParameterJdbcTemplate Spring (я использую 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 Ответ

4 голосов
/ 02 ноября 2009

Когда вы пытаетесь связать коллекцию или массив как именованный параметр, NamedParameterJdbcTemplate разбивает соответствующий именованный параметр в вашем выражении на количество позиционных параметров, соответствующих длине вашего массива / коллекции. Это полезно для WHERE column IN (:param) операторов, но в этом случае работать не будет.

Чтобы установить фактический массив Postgres, вы должны указать свой параметр как java.sql.Array. Вы можете создать его экземпляр, используя метод Connection.createArrayOf () .

...