2017-10-20 8 views
0

私はcamel 2.17.0を使用していますが、SQL IN節を使用して更新クエリを実行する必要があります。クエリは、私はラクダのヘッダにすべてのパラメータを設定しているapacheでIn節を使用する

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

で、パラメータIDSは<ロング>一覧で、私の実行中に、リスト内の4つの要素があります。しかし、私は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' 

我々は句で使用するときに我々は、クエリ内の他のパラメータを与えることができないことを何らかの義務がありますのようなものですか?お知らせ下さい。

+0

回避策の1つは、Beanまたはプロセッサを追加し、渡されたExchangeオブジェクトを使用してメソッドにJDBC呼び出しを行い、ヘッダーにアクセスすることです。私はこれを何度もやったことがありますが、私はコンポーネントの問題に立ち向かっています。それは魅力的なものです。 –

+0

さらに新しいCamelバージョンにアップグレードしてみてください –

答えて

0

in節では、2.18で更新する必要があります。しかし、2.17を使用することによって、コンマで区切られた文字列を作成し、それを交換ヘッダに入れてください。自動的にマップされます。

この手法を使用してSQLインジェクションに気を付けてください。