2009-11-01 6 views
0

테이블 myTable에 이중 정밀도 배열 필드 dblArrayFld이 있으며 스프링의 NamedParameterJdbcTemplate (Postgres를 사용하고 있습니다)을 사용하여 업데이트하고 싶습니다. 이 같은NamedParameterJdbcTemplate을 사용하여 배열 필드 업데이트

내가 실행 해요 코드 :에서 myArray 여기에 결함이 :

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

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

이것은 내가 내 구문을 믿고있어 나 근처 "$ 2"

에서 구문 오류라는 오류를 반환 . 또한 다음과 같은 방법으로 :myarray을 감싸는 시도했다 :

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

올바른 구문이 여기에 무엇입니까?

+0

myDblArrayListVar는 어떤 유형입니까? –

+0

죄송합니다. 그 중 하나 : myDblArrayListVar가 ArrayList입니다.

+0

이 대답을 기대했지만 확인을 얻고 싶습니다. –

답변

3

명명 된 매개 변수로 Collection 또는 배열을 바인딩하려고하면 NamedParameterJdbcTemplate은 배열의 적절한 길이의 매개 변수로 선언문의 적절한 명명 된 매개 변수를 분해합니다. 이는 WHERE column IN (:param) 문에 유용하지만이 경우에는 작동하지 않습니다.

실제 Postgres 배열을 설정하려면 매개 변수를 java.sql.Array으로 지정해야합니다. Connection.createArrayOf() 메소드를 사용하여 인스턴스를 생성 할 수 있습니다.

+0

JDBC가 createArrayOf를 표준으로 정의 할 수 있지만 Postgres JDBC4가 지원하지 않는 것 같습니다. 좋은 대안? –

+0

최신 JDBC가 수행합니다. 사실, 잠시 동안 그랬습니다. http://jdbc.postgresql.org/changes.html#version_8.3-dev602 – ChssPly76

+0

감사합니다. –