我的選擇查詢 在駱駝我怎麼可以更新的結果集coloumn的值
sql.selectOrder=select STID,CLLTR from GSI_DEVL.POLLUX_DATA WHERE PROCESSED='FALSE'
我的路線是
<route id="markRowsAsProcessed-Route" >
<!-- <from uri="timer://markRowsAsProcessed?delay=5000"/>-->
<from uri="sqlComponent:{{sql.selectOrder}}?consumer.useIterator=false" />
<doTry>
<to uri="bean:rowProcessController"/>
<to uri="sqlComponent:{{sql.markRows}}?batch=true"/>
<doCatch>
<exception>java.sql.SQLException</exception>
<exception>java.lang.IllegalStateException</exception>
<exception>java.sql.SQLException</exception>
<exception>java.lang.ClassCastException</exception>
</doCatch>
</doTry>
</route>
我bean是
public class RowProcessController {
List<Map<String, Object>> stationUnMarkedList = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> stationMarkedList = new ArrayList<Map<String, Object>>();
Map<String,Object> stationMap = null;
@SuppressWarnings("unchecked")
@Handler
public List<Map<String, Object>> markRowAsProcessed(Exchange exchange)
{
stationUnMarkedList = (List<Map<String, Object>>)exchange.getIn().getBody();
for(Map<String,Object> data: stationMarkedList) {
System.out.println(data.get("STID"));
stationMap=new HashMap<String,Object>();
stationMap.put("stationId", ((String)data.get("STID")));
stationMap.put("callLetter", ((String)data.get("CLLTR")));
stationMarkedList.add(stationMap);
}
return stationMarkedList;
}
}
我想要將結果集處理列更新爲完成或某個值。
我試圖
sql.markRows=UPDATE POLLUX_DATA SET PROCESSED='DONE' where stid=:stationId
但是,這並不在數據庫中更新的任何值。爲什麼不?
你確定身體有正確的類型? 在SQL語句中使用的命名變量必須定義爲標題,或者如果其爲java.util.Map(請參閱[link](http://camel.apache.org/sql-component.html)),則定義在標題中。 您也可以嘗試在交換機上設置header ** stationId **。 – Ewout
如果刪除命名查詢,同樣的問題persist.if我刪除選擇語句,並嘗試直接更新語句,然後它的working.I認爲這些combinatins的一些問題。駱駝是有任何限制使用select和update together.I意思是我可以通過bean來處理結果集並更新數據庫嗎? –