栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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("%1$032X",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]" />


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号