在apache Camel中使用In子句

时间:2017-10-20 13:25:44

标签: apache-camel camel-sql

我正在使用camel 2.17.0并且必须使用SQL IN子句执行更新查询。查询是

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

我已将所有参数设置为camel标头,参数 ids 是List< Long>并且在执行期间列表中有四个元素。但是我得到了一个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子句时,是否有任何授权我们不能在查询中提供任何其他参数?请指教。

1 个答案:

答案 0 :(得分:0)

对于in子句,您需要在2.18上更新。但是,通过使用2.17,只需将逗号分隔的字符串放入交换标头中。它将自动映射。

请注意使用此技术进行任何SQL注入。