2017-10-20 145 views
0

我使用的是驼峰2.17.0,并且必须使用SQL IN子句执行更新查询。查询在Apache中使用In子句骆驼

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

我已经设置的所有参数骆驼头,参数IDS是一个List <朗>并有我的执行时,在清单四个要素。但我得到一个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

尝试升级到更新的骆驼版本 –

回答

0

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

只要提防使用这种技术的任何SQL注入。