2017-10-20 11 views
0

J'utilise camel 2.17.0 et je dois exécuter une requête de mise à jour en utilisant la clause SQL IN. La requête estUtilisation de la clause In dans apache Camel

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

J'ai mis tous les paramètres à en-tête de chameau, le paramètre ids est une liste longue < > et a quatre éléments dans la liste au cours de mon exécution. Mais je reçois une exception 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 

Je ne suis pas sûr de ce qui s'est mal passé. Quand j'ai dur codé toutes les valeurs sauf le paramètre les identifiants de la liste, je suis capable de mettre à jour la table sans aucune erreur. requête modifiée est comme

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

Y at-il le mandat que lorsque nous utilisons dans la clause, nous ne pouvons pas donner d'autres paramètres dans la requête? S'il vous plaît donnez votre avis.

+0

Une solution de contournement consiste à ajouter un bean ou un processeur et de simplement effectuer les appels JDBC dans une méthode utilisant l'objet Exchange transmis pour accéder aux en-têtes. Je l'ai fait plusieurs fois que j'ai rencontré des problèmes de composants et cela fonctionne comme un charme. –

+0

Essayez également la mise à niveau vers une version plus récente de Camel –

Répondre

0

Pour la clause in, vous devez mettre à jour 2.18. Cependant, en utilisant 2.17, faites simplement la chaîne séparée par des virgules et placez-la dans l'en-tête d'échange. Il sera automatiquement mappé.

Méfiez-vous de toute injection SQL en utilisant cette technique.