JdbcBatchItemWriter中的更新语句

时间:2016-08-01 10:41:40

标签: sql spring-batch spring-jdbc

我无法使用JdbcBatchItemWriter正确更新数据库表。下面是代码片段。在空表上插入正在获得正确的响应,但在输入表上没有发生更新。

<bean id="odbWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="dataSource" ref="dataSource"></property>
    <property name="sql">
        <value>
            <![CDATA[
                update employeethree set salary = :salary, designation = :designation, promotioneligibility = :promotionEligibility 
            ]]>
        </value>
    </property>

    <property name="itemSqlParameterSourceProvider">
    <bean
    class="batchjobreaddb.CustomBeanPropertyItemSqlParameterSourceProvider" />
    </property>

如果我将CDATA内的查询更改为:

insert into employeetwo values(:empId, :empName, :dept , :salary, :designation, :experienceInMonths, :promotionEligibility)
然后它给了我想要的结果。 (EmployeeTwo具有相同的结构但是为空。)

请帮忙。谢谢:))

1 个答案:

答案 0 :(得分:0)

您的UPDATE查询没有WHERE子句。您如何知道要更新的记录?

对于正确的更新行为,您必须指定一个WHERE子句,该子句可以正确标识您希望通过UPDATE查询进行修改的记录。

对于INSERT查询,这显然不是必需的,因为您正在创建全新的记录,而不是修改现有记录。

假设您的示例INSERT查询的雇员ID字段为empid,请尝试修改您的JdbcBatchItemWriter,将sql的值设置为:

<property name="sql">
    <value>
        <![CDATA[
            UPDATE employeethree 
            SET salary = :salary, 
                designation = :designation, 
                promotioneligibility = :promotionEligibility 
            WHERE empid = :empId
         ]]>
    </value>
</property>