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

我正在尝试创建一个执行大量DB(Microsoft SQL Server 2008 DB)操作的m子流。

我执行的第一个数据库查询返回ID列表

select id from first_table;

我通过构建ArrayList的Java转换器运行有效负载:[1,2,3,4,5],然后将其保存为变量索引

然后我尝试在另一个查询中使用此数组

select * from another_table where first_table_fk in (#[flowVars.indices]);

但是无论我做什么我都会不断收到错误

不支持从UNKNOWN到UNKNOWN的转换。

使用IN运算符时,Mule无法处理java.util.ArrayList(或常规数组int [])。

然后,我尝试将整个查询创建为字符串变量(然后在中引用它)。

结果如下:java.lang.IllegalArgumentException:未为SQL语句找到SQL策略:#[flowVars.queryString]

您能帮我解决我的问题吗(在Mule sql查询中使用IN运算符)?

我正在使用Mule studio 3.4.0 CE。

谢谢!

Per-Axel Felth

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

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

    public class CustomQueryBuilder implements Callable {
        @Override
        public 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 class="CustomQueryBuilder"/>
    
  3. 然后插入通用出站终结点而不是jdbc出站终结点,并引用创建的查询。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

将参数(列表或数组)赋予in运算符-python,sql

来自分类Dev

将多个参数传递给流运算符

来自分类Dev

SQL查询JOIN或IN运算符?

来自分类Dev

在SQL查询中使用IN运算符

来自分类Dev

Mule中查询参数日期改为字符串

来自分类Dev

将参数列表作为输入传递给SQL查询

来自分类Dev

如何将参数传递给Microsoft SQL Server查询?

来自分类Dev

将List <int>作为查询参数传递给SQL Server

来自分类Dev

将参数列表作为输入传递给SQL查询

来自分类Dev

将List <int>作为查询参数传递给SQL Server

来自分类Dev

在存储过程中将运算符作为参数传递,同时防止 SQL 注入风险

来自分类Dev

Mule - 'map' 运算符的类型不匹配

来自分类Dev

使用C#中的参数化查询在SQL中为IN运算符发送参数

来自分类Dev

使用参数运算符的MySQL参数化查询

来自分类Dev

在链接的 SQL Server 表上使用参数访问查询 Like 运算符

来自分类Dev

Mule JDBC端点在执行SQL查询时导致异常

来自分类Dev

将数据库结果作为参数传递给Mule中的setpayload组件

来自分类Dev

如何使用类似的运算符在neo4j Cypher查询中传递动态参数

来自分类Dev

将python列表传递给SQL查询

来自分类Dev

用|在c函数中查询 参数中的运算符

来自分类Dev

将附加参数传递给Mongoose查询

来自分类Dev

将参数传递给$ resource查询或获取

来自分类Dev

mysql将参数传递给子查询

来自分类Dev

将参数传递给SQLSRV WHERE IN查询

来自分类Dev

将查询参数传递给子表单

来自分类Dev

将参数传递给ESPER EPL查询?

来自分类Dev

将查询参数传递给WCF服务

来自分类Dev

将参数传递给oracle查询

Related 相关文章

热门标签

归档