使用NamedParameterJdbcTemplate更新数组字段
我在表 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您尝试将 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 forWHERE 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.