2012-02-27 7 views
0

レコードがあるファイルがあります。スプリングバッチでレコードを削除する

ファイルを読み込み、データベーステーブルから同じレコードを削除するスプリングバッチプログラムを開発する必要があります。

ItemWriterを通じて削除クエリを実行することはできますか?

答えて

0

更新操作と削除操作の間に違いはありませんが、SQLの変更のみです。あなたの質問への簡単な答えははいになるでしょう。 次のコードは、ブックテーブルから削除することを前提とした基本的なニーズに役立ちます。

public class BookJdbcItemWriter implements ItemWriter<Book> { 

     private static final String DELETE_BOOK = "delete from Book where id = ?"; 

     private JdbcTemplate jdbcTemplate; 

     public BookJdbcItemWriter(DataSource dataSource) { 
       this.jdbcTemplate = new JdbcTemplate(dataSource); 
     } 

     public void write(List<? extends Book> items) throws Exception { 
       for(Book item : items) { 
         int updated = jdbcTemplate.update(DELETE_BOOK,item.getId());               
       } 
     } 
} 
3

Serkans答えは右ですが、あなたは直接spring-batch-jdbc-item-writerを見る使用することができspring-jdbc-batch-templateの代わりに、通常のJDBC-テンプレート

  • を使用することができ、バッチSQL

    1. で作業するためのいくつかのより多くの可能性がありますサンプルコード

    コード例バネバッチXML設定とJavaコード

    <bean id="itemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter"> 
        <property name="dataSource" ref="dataSource" /> 
        <property name="sql"> 
         <!-- Why CDATA? 
    
          because < etc. is not allowed for xml values 
          when you use &lt; xml parser will work, but 
          now the sql won't because of the & spring assumes 
          a placeholder, see 
          - AbstractSqlPagingQueryProvider.init(...) 
          - JdbcParameterUtils.countParameterPlaceholders(...) 
    
          --> 
         <value> 
          <![CDATA[ 
           DELETE FROM TEST 
           WHERE id = ? 
           and sub.id = ? 
           and ... 
          ]]> 
         </value> 
        </property> 
        <property name="itemPreparedStatementSetter"> 
         <bean class="...FieldSetItemPreparedStatementSetter" /> 
        </property>   
    </bean> 
    
    /** 
    * Implementation for {@link ItemPreparedStatementSetter}, 
    * sets the values from {@link FieldSet}. 
    * 
    */ 
    public class FieldSetItemPreparedStatementSetter implements ItemPreparedStatementSetter<FieldSet> { 
    
        /** {@inheritDoc} */ 
        @Override 
        public void setValues(FieldSet item, PreparedStatement ps) throws SQLException { 
         for (int i = 0; i < item.getValues().length; i++) { 
          // PreparedStatements start with 1 
          ps.setObject(i + 1, item.getValues()[i]); 
         } 
        } 
    } 
    
  • 関連する問題