2014-03-05 1 views
0

나는 스프링의 namedParamJdbcTemplate을 사용하여 IN 절을 처리하기 위해 다양한 포럼을 진행했지만, 여전히 내가 찾고있는 물건을 얻지 못하고있다. 아래는 내 문제입니다 :IN 절을 사용하는 UPDATE 쿼리에 Jdbc 템플릿을 어떻게 사용할 수 있습니까?

I했습니다 다음과 같은 방법

public void updateBatchTableForStatus(List<Integer> reportShellIds, String scheduleType) { 

    Map<String,List<Integer>> shellIds = Collections.singletonMap("reportShellIds", reportShellIds); 
    MapSqlParameterSource parameters = new MapSqlParameterSource(); 
    parameters.addValue("reportShellIds", shellIds, Types.NUMERIC) 
    parameters.addValue("eventType", scheduleType, Types.VARCHAR); 

    this.namedParamJdbcTemplate.update(GET_EVENT_METADATA_INFO, parameters); 

} 
위의 방법에 대해 참조 쿼리가 아래에 정의되어

: BATCH_ID 열에

public static final String SQL_UPDATE_BATCH_LOOKUP_TABLE_FOR_STATUS_BY_BATCH_IDS = "" + 
      "UPDATE " + 
      TABLE_BATCH_REF + " BLK " + 
      "SET " + 
      "BLK.EXECUTION_STATUS_CODE = :eventType " + 
      "WHERE " + 
      "BLK.BATCH_ID in(:reportShellIds) "; 

데이터 유형이 번호는 (24 , 0) 및 VARCHAR의 EXECUTION_STATUS_CODE 열에 사용됩니다. Oracle 데이터베이스를 사용하고 있습니다.

그러나 위의 메서드는 SQL 예외를 throw합니다.

누군가가 내가 틀렸다고 말해 줄 수 있고, 그게 무슨 수정입니까?

미리 감사드립니다.

안부 LB

+0

에 그대로 배열을 배치 할 수 있습니다. –

답변

0

당신은지도에 reportShellIds 결합되어 있지만, 봄이 올바르게 바인딩에 대한 목록을 할 필요가있다. 아마도 shellIds.values() 또는 변수 reportShellIds을 의미할까요?

+0

shellIds.values ​​()를 사용해 보았습니다. 나는 여전히 이전처럼 SQL 예외를 얻는다 : org.springframework.jdbc.UncategorizedSQLException : PreparedStatementCallback; SQL에 대한 분류되지 않은 SQLException [<< my sql query >>]; SQL 상태 [99999]; 오류 코드 [17132]; 잘못된 변환이 요청되었습니다. 중첩 예외가 java.sql.SQLException입니다 : 잘못된 변환이 요청되었습니다 – lbvirgo

+0

당신은 어떤 경우에도 null 값을 전달하지 않습니다? 또한,'.values ​​()'가 List가 아닌 Set을 반환한다는 점이 마음에 들지 않을 수도 있습니다. –

0

당신은 간단한 Map<String,Object> 또 다른 방법을 사용하여 문제의 실제 SQL 예외를 포함하십시오 미래에서 매개 변수지도

public int update(String sql, java.util.Map<java.lang.String,?> paramMap) 
관련 문제