Mule Sql查询-将参数传递给IN运算符

Mule Sql查询-将参数传递给IN运算符,第1张

Mule Sql查询-将参数传递给IN运算符

Mule使用语句(来自java.sql),因此不支持以这种方式使用IN。每次出现的MEL表达式(#[])都将替换为问号(?),并且实际值将作为参数传递。我建议您通过动态构建查询并将其分配给JDBC连接器并使用通用端点执行它来解决此问题。

  1. 创建一个这样的Java类:

    public class CustomQueryBuilder implements Callable {@Overridepublic Object onCall(MuleEventContext eventContext) throws Exception {    JdbcConnector c = (JdbcConnector) eventContext.getMuleContext().getRegistry().lookupConnector("JDBC_connector");    StringBuilder query = new StringBuilder();    String querybase = "select * from another_table where first_table_fk in (";    query.append(querybase);    int numIndices = ((ArrayList<Integer>)eventContext.getMessage().getInvocationProperty("indices")).size();    ArrayList<String> indices = new ArrayList<String>();    for(int i=0; i<numIndices; i++) { indices.add("#[flowVars.indices[" + i + "]");    }    query.append(StringUtils.join(indices, ", "));    query.append(")");    String finalQuery = query.toString();    MessageDigest md = MessageDigest.getInstance("MD5");    String queryDigest = String.format("%12X",new BigInteger(1, md.digest(finalQuery.getBytes("UTF-8"))));    if (!c.getQueries().containsKey(queryDigest)) { c.getQueries().put(queryDigest, finalQuery);    }    eventContext.getMessage().setInvocationProperty("generatedQueryKey", queryDigest);    return eventContext.getMessage();}

    }

  2. 设置“索引”流变量后,请在流中使用它。

    <component />
  3. 然后插入通用出站终结点而不是jdbc出站终结点,并引用创建的查询。

    <outbound-endpoint exchange-pattern="request-response" address="jdbc://#[flowVars.generatedQueryKey]" />


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5021330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存