带有ON DUPLICATE KEY UPDATE的MySQL Batchupdate()

时间:2013-01-02 13:18:52

标签: java mysql spring batch-updates

我正在使用batchUpdate()在表格中插入多条记录。根据要求,如果主键在插入时存在重复值,则应使用最新接收的数据进行更新,因此我尝试在ON DUPLICATE KEY UPDATE语句中使用INSERT。当我使用单个插入时,ON DUPLICATE KEY UPDATE效果很好,但是当我使用batchupdate()进行相同查询时,它会出错。错误如下:

  

Testcase:testVehicleTracking(com.em.ert.test.TrackingServiceTest):导致错误   PreparedStatementCallback;错误的SQL语法[INSERT INTO test_tracking(sino,material_id,material_type,vehicle_position,rundown_num,msg_type,msg_status,msg_timestamp)VALUES(?,?,?,?,?,?,?,?)ON DUPLICATE KEY UPDATE];嵌套异常是java.sql.BatchUpdateException:SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

我不明白为什么ON DUPLICATE KEY UPDATE不能用于batchupdate()。理想情况下应该是因为在我看来工作中没有任何不同。

我应该做些什么来实现这个目标?

1 个答案:

答案 0 :(得分:2)

ON DUPLICATE KEY UPDATE子句后,您缺少列分配

来自MySQL manual

  

<强> 13.2.5。 INSERT语法

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

13.2.5. INSERT Syntax
13.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Syntax