Verwenden Sie NamedParameterJdbcTemplate, um das Array-Feld zu aktualisieren
-
11-09-2019 - |
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?
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.