JdbcBatchItemWriter中的更新语句

问题描述 投票:5回答:1

我无法使用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具有相同的结构但是为空。)

请帮忙。谢谢 :)

sql spring-batch spring-jdbc
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.