如何将硬编码的SQL查询传递给JdbcBatchItemWriter?

时间:2015-11-30 18:15:24

标签: java sql spring spring-batch

现在我有这个:

<bean id="hardcodedQuery" 
    class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="dataSource" ref="dataSource" />
    <property name="sql">
        <value>
            <![CDATA[
                DELETE from GENERIC_TABLE
                WHERE id = 999
            ]]>
        </value>
    </property>
    <property name="itemSqlParameterSourceProvider">
        <bean
            class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    </property>       
</bean>

但是我一直得到java.lang.IllegalArgumentException,说我的SQL查询是参数化的。我知道他们希望我给读者一些参考,并且在命令中有:randomVariable,但我坚决反对这个明显的要求。我错了,是否有解决方法?或者我必须为我的bean使用完全不同的类吗?

这是错误消息:

Caused by: java.lang.IllegalArgumentException: Using SQL statement with '?' placeholders requires an ItemPreparedStatementSetter

谢谢!

1 个答案:

答案 0 :(得分:1)

简短的回答是,这门课程并不适合您尝试做的事情。 ItemWriter合约假定基于项目的处理,这意味着您需要为每个项目参数化SQL。如果您只想运行删除语句,请使用使用Tasklet的{​​{1}}实现。