2016-09-28 4 views
0

ファイル(FlatFile)から読み込み、そのIDがファイルのIDと一致する場合は列を更新する必要があります。ファイルは正しく読み込まれていますが最後の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

の終わりに私は条件が、それは同じ –

+0

を振る舞うところ追加場合でも、私はのように列を更新したいですこのIDにファイルが存在する場合(ファイルリーダーから読み取った場合)、このDBタブに「Y」が表示されます。ル。それ以外の場合は 'N'として更新してください –

答えて

1

。あなたはそれを制限する必要があります。現在;ライターに渡された最後のレコードのIDと等しいIDを持つレコードのBIZ_ARNG_CDを 'Y'に設定する必要があります。 (where句更新スクリプトの追加「N」にデータベース列をデフォルトと更新ステートメント

  • に「N」に設定していない

    1. -

      あなたは2通りの方法でこの問題を解決することができますBIZ_ARNG_CDは!=「Y」)

  • 関連する問題