2

dblArrayFldテーブルに倍精度配列フィールドがあり、 myTableSpring を使用して更新したいと考えています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.ArrayConnection#createArrayOf()メソッドを使用してそのインスタンスを作成できます。

于 2009-11-01T21:44:42.573 に答える