2017-10-20 9 views
0

나는 camel 2.17.0을 사용 중이며 SQL IN 절을 사용하여 업데이트 쿼리를 실행해야합니다. 쿼리 내가 헤더를 낙타 모든 매개 변수를 설정 한아파치의 In 절 사용하기

update MY_TABLE set STATUS = :#status where ID in (:#in:ids) AND TYPE = :#type 

이며, 매개 변수 IDS는 목록을 < 긴 >을하고 내 실행 중에 목록의 네 가지 요소가 있습니다. 하지만 SQL 예외가 발생했습니다

PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; Number of parameters mismatch. 
Expected: 6, was: 4; nested exception is java.sql.SQLException: Number of parameters mismatch. Expected: 6, was: 4 

무엇이 잘못되었는지 잘 모르겠습니다. 매개 변수 목록 ID 이외의 모든 값을 하드 코딩 할 때 오류없이 테이블을 업데이트 할 수 있습니다. 수정 된 쿼리는

update MY_TABLE set STATUS = 'SUCCESS' where ID in (:#in:corrIds) AND TYPE = 'type' 

우리가 IN 절을 사용할 때 우리는 쿼리에 다른 매개 변수를 제공 할 수없는 어떤 의무가 있습니까

처럼? 제발 조언.

+0

해결 방법 하나의 해결 방법은 bean 또는 프로세서를 추가하고 전달 된 Exchange 개체를 사용하여 메서드에 JDBC 호출을 수행하여 헤더에 액세스하는 것입니다. 나는 여러 번 구성 요소 문제에 맞서 싸웠으며 매력처럼 작동합니다. –

+0

최신 Camel 버전으로 업그레이드 해보세요. –

답변

0

in 절의 경우 2.18에서 업데이트해야합니다. 그러나 2.17을 사용하여 쉼표로 구분 된 문자열을 만들어 교환 헤더에 넣으십시오. 자동으로 매핑됩니다.

이 기술을 사용하여 SQL 주입에주의하십시오.