使用NamedParameterJdbcTemplate更新数组字段

发布于 2024-08-09 09:33:48 字数 799 浏览 2 评论 0原文

我在表 myTable 中有一个双精度数组字段 dblArrayFld,我想使用 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)

这里正确的语法是什么?

I have a double precision array field dblArrayFld in a table myTable and I'd like to update it using Spring's NamedParameterJdbcTemplate (I'm using Postgres).

I'm running code like this:

SqlParameterSource params = (new MapSqlParameterSource())
        .addValue("myarray", myDblArrayListVar)
        .addValue("myid", 123);

namedJdbcTemplate.update("UPDATE myTable SET dblArrayFld = :myarray WHERE idFld = :myid", params);

This returns an error that reads syntax error at or near "$2"

I'm assuming my syntax on :myarray is at fault here. I've also tried encasing :myarray in the following ways:

  • dblArrayFld={:myarray}
  • dblArrayFld={ :myarray }
  • dblArrayFld=[:myarray]
  • dblArrayFld=ARRAY[:myarray]
  • dblArrayFld=(:myarray)

What's the correct syntax here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素手挽清风 2024-08-16 09:33:48

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

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

Wehn you try to bind Collection or array as named parameter, NamedParameterJdbcTemplate explodes the appropriate named parameter in your statement into a number of positional parameters matching the length of your array / collection. This is useful for WHERE column IN (:param) statements, but is not going to work in this case.

In order to set an actual Postgres array you have to supply your parameter as java.sql.Array. You can create its instance using Connection#createArrayOf() method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文