我对mule的数据库连接器有问题,我用它来进行选择查询。我有一个字符串的arraylist在参数中给出内部。
Mule Sql Query - passing parameters to the IN operator
上面提到的解决方案不适用于3.7.3 Mule ESB,我已经尝试了很多方法并搜索了它。除了这份文件,我到目前为止还没有明确的方法。
我正在使用以下查询:
从db_table中选择*,其中id为(2,3,4)
在我的例子中,2,3,4位于我的流量变量中,其中包含arraylist。
有什么建议吗?
答案 0 :(得分:0)
你可以这样做。我使用MySQL作为我的例子,只需将其更改为Oracle。
<flow name="dbqueryFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/db" doc:name="HTTP"/>
<set-payload value="#[[1,3,5]]" doc:name="Mock Set of Ids"/>
<expression-component doc:name="Set IDs to String"><![CDATA[ids = payload.toString().replace("[", "").replace("]", "").replace(", ", ",");
flowVars['ids'] = ids;]]></expression-component>
<logger message="SID === #[flowVars.ids]" level="INFO" doc:name="Logger"/>
<db:select config-ref="MySQL_Configuration" doc:name="Database" >
<db:dynamic-query><![CDATA[SELECT * FROM bridge WHERE id IN (#[flowVars.ids])]]></db:dynamic-query>
</db:select>
<logger level="INFO" doc:name="Logger"/>
</flow>
希望这有帮助
答案 1 :(得分:0)
我再次使用这个答案解决了相关问题:
Mule Sql Query - passing parameters to the IN operator
在这个java块中,我构建了我的查询并将其放入流变量,称为sql
:
public Object onCall(MuleEventContext eventContext) throws Exception {
// TODO Auto-generated method stub
ArrayList<String> vib_list = eventContext.getMessage().getInvocationProperty("vibs");
String locale = eventContext.getMessage().getInvocationProperty("lang_locale").toString();
StringBuilder query = new StringBuilder();
String queryBase = "select distinct(matnr) from cated_prodrelease where matnr in(";
query.append(queryBase);
int numIndices = ((ArrayList<Integer>)eventContext.getMessage().getInvocationProperty("vibs")).size();
ArrayList<String> indices = new ArrayList<String>();
for(int i=0; i<numIndices; i++) {
indices.add("'"+ vib_list.get(i) + "'");
}
query.append(StringUtils.join(indices, ", "));
query.append(") " + "AND locale = '" + locale + "' " + "AND release_type = 'PI_RELEASE'");
String finalQuery = query.toString();
eventContext.getMessage().setInvocationProperty("sql", finalQuery);
return eventContext.getMessage();
}
然后我直接在db connector的动态查询参数上使用了这个流变量sql,它完美地运行了。
<db:select config-ref="PDP_Configuration" doc:name="Database">
<db:dynamic-query><![CDATA[#[flowVars.sql]]]></db:dynamic-query>
</db:select>
这不是官方的答案,但我相信Mule开发人员应该找到这种主要问题的官方解决方案。我希望它有所帮助!