代码之家  ›  专栏  ›  技术社区  ›  Mark Elliot

使用NamedParameterJDBCTemplate更新数组字段

  •  0
  • Mark Elliot  · 技术社区  · 15 年前

    我有一个双精度阵列场 dblArrayFld 在桌子上 myTable 我想用弹簧更新它 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 回复  |  直到 15 年前
        1
  •  4
  •   ChssPly76    15 年前

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

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