Frage

Ich habe ein Array-Feld mit doppelter Genauigkeit dblArrayFld in einer Tabelle myTable und ich würde es gerne mit Spring's aktualisieren NamedParameterJdbcTemplate (Ich verwende Postgres).

Ich führe Code wie diesen aus:

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

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

Dies gibt einen Fehler zurück, der einen Syntaxfehler bei oder in der Nähe von „$2“ lautet.

Ich gehe davon aus, dass meine Syntax :myarray hier fehlerhaft ist.Ich habe es auch mit Encasing versucht :myarray auf folgende Weise:

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

Wie lautet hier die richtige Syntax?

War es hilfreich?

Lösung

Wenn Sie versuchen, eine Sammlung oder ein Array als benannten Parameter zu binden, NamedParameterJdbcTemplate Zerlegt den entsprechenden benannten Parameter in Ihrer Anweisung in eine Reihe von Positionsparametern, die der Länge Ihres Arrays/Ihrer Sammlung entsprechen.Dies ist nützlich für WHERE column IN (:param) Aussagen, wird aber in diesem Fall nicht funktionieren.

Um ein tatsächliches Postgres-Array festzulegen, müssen Sie Ihren Parameter als angeben java.sql.Array.Sie können seine Instanz mit erstellen Connection.createArrayOf() Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top