我有一个在数据库中读取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
查询中使用以从数据库中检索值?
答案 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]
我需要的并为我工作