如何从MULE中的CSV文件中读取值,并使用该值从数据库中检索数据

时间:2014-03-26 07:14:23

标签: sql csv mule mule-studio mule-el

我有一个在数据库中读取CSV文件和perfrorm CRUD操作的流程...我的流程有点像: -

<flow name="CsvToFile" doc:name="CsvToFile">
    <file:inbound-endpoint path="C:\Data" responseTimeout="10000" doc:name="CSV" connector-ref="File">
        <file:filename-wildcard-filter pattern="*.csv" caseSensitive="true"/>
    </file:inbound-endpoint>
    <jdbc-ee:csv-to-maps-transformer delimiter="," mappingFile="src/main/abc.xml" ignoreFirstRecord="true" doc:name="CSVTransformer"/>
    <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="SelectQuery" queryTimeout="-1" connector-ref="jdbcConnectorGlobal" doc:name="Database">
        <jdbc-ee:query key="SelectQuery" value="Select * FROM DBDATA where ID=#[map-payload:ID]"/>
    </jdbc-ee:outbound-endpoint>
    <set-payload value="#[message.payload]" doc:name="Set Payload"/>
</flow>

现在,如果我使用SELECT SQL语句..我没有看到结果,也没有提取数据......但是如果我使用INSERT之类的

<jdbc-ee:query key="InsertQuery" value="INSERT INTO DBDATA (ID,NAME,AGE) VALUES(#[map-payload:ID],#[map-payload:NAME],#[map-payload:AGE])"/>

UPDATE SQL语句,我发现它正在工作,数据在数据库中插入或更新。

我的问题是:如何从ID文件中读取.CSV值并在SELECT查询中使用以从数据库中检索值?

2 个答案:

答案 0 :(得分:1)

您有exchange-pattern="one-way",这意味着jdbc出站呼叫不会返回主流。请改用exchange-pattern="request-response"来获取返回值。

<set-payload value="#[message.payload]" doc:name="Set Payload"/>也没有任何意义。您需要某种变换器来使返回值可读。您可以添加记录器以查看返回的有效负载。

更新:

csv-to-maps-transformer的返回值是ArrayList,而不是Map,因此不能使用map-payload:ID。尝试拆分ArrayList,如果只有一个条目,请使用#[payload[0].ID]

答案 1 :(得分:0)

感谢Anton .. 最终的解决方案是#[payload[0].ID]我需要的并为我工作