2016-09-28 67 views
0

如果文件中存在的ID與列中的ID匹配,我必須從文件(FlatFile)中讀取並更新列。文件正在被正確讀取,但只有最後一個id值在這裏更新。請找到片段Spring Batch - 最後來自閱讀器的項目正在更新

工作-config.xml中

<bean id="abcitemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> 
     <property name="resource" value="file:datafile/outputs/ibdData.txt" /> 
    <property name="lineMapper"> 
     <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">   
      <property name="lineTokenizer"> 
       <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
       <property name="names" value="ID,NAM,TYPE" /> 
       <property name="delimiter" value="|"/> 
      </bean> 
      </property> 
      <property name="fieldSetMapper"> 
      <bean class="com.pershing.intraware.springbatch.mapper.abcFieldsetMapper" />   
      </property> 
      </bean> 
     </property> 
    </bean> 

    <bean id="abcitemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter" scope="step"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="sql"><value>UPDATE TEST_abc SET BIZ_ARNG_CD = CASE WHEN ID IN (SELECT ID FROM TEST_abc WHERE ID= ? and MONTH=(to_char(sysdate, 'MM')) AND YR =(to_char(sysdate, 'YY'))) THEN 'Y' ELSE 'N' END</value></property> 
    <!-- It will take care matching between object property and sql name parameter --> 
    <property name="itemPreparedStatementSetter" ref="testPrepStatementSetter" /> 
</bean> 
</beans> 

Setter.java

public class IDItemPreparedStatementSetter implements ItemPreparedStatementSetter<Test> { 
    @Override 
    public void setValues(Test item, PreparedStatement ps) throws SQLException { 
    // TODO Auto-generated method stub 
    ps.setString(1, item.getID()); 
    }  
} 
+0

我想你錯過了'WHERE ID =?'在查詢 –

+0

結束即使我添加一個WHERE條件,它的行爲同樣 –

+0

我想更新一列'Y'(如果該文件中存在該ID)(從文件讀取器中讀取)出現在此DB選項卡中樂。否則更新爲'N' –

回答

1

是每次點火時間您的查詢更新數據庫的每一行。你需要限制這一點。目前;它必須將BIZ_ARNG_CD設置爲'Y',以便ID等於傳遞給作者的最後一條記錄的ID。

您可以通過兩種方式解決這個問題 -

  1. 默認數據庫列到「N」和不更新語句
  2. 將其設置爲「N」加入其中更新腳本條款( BIZ_ARNG_CD!=「Y」)