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