2016-01-21 20 views
0

我的選擇查詢 在駱駝我怎麼可以更新的結果集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 

但是,這並不在數據庫中更新的任何值。爲什麼不?

+0

你確定身體有正確的類型? 在SQL語句中使用的命名變量必須定義爲標題,或者如果其爲java.util.Map(請參閱[link](http://camel.apache.org/sql-component.html)),則定義在標題中。 您也可以嘗試在交換機上設置header ** stationId **。 – Ewout

+0

如果刪除命名查詢,同樣的問題persist.if我刪除選擇語句,並嘗試直接更新語句,然後它的working.I認爲這些combinatins的一些問題。駱駝是有任何限制使用select和update together.I意思是我可以通過bean來處理結果集並更新數據庫嗎? –

回答

0

你可以嘗試更改查詢的命名參數表示法:#而不只是:

sql.markRows = UPDATE POLLUX_DATA組處理過的= '完成',其中STID =#的stationID

+0

Sundar,Stiil它沒有更新。我正在使用:#stationId當我發佈這個。我錯誤地粘貼在這裏:stationId。 我需要將行標記爲已處理 –

+0

在查看您的代碼時,我認爲問題是一個錯字,您嘗試遍歷bean中的空列表,您正在將列表讀入列表stationUnMarkedList,但正在迭代通過stationMarkedList,所以更新查詢的主體是一個空的列表。我會建議添加日誌,並在處理異常時嘗試處理它,不要吞下異常。 – Sundar