我使用batchUpdate()
在表中插入多条记录。根据要求,如果在插入主键时存在重复值,则应该使用最新接收到的数据进行更新,因此我试图在INSERT
语句中使用ON DUPLICATE KEY UPDATE
。当我使用单个插入时,ON DUPLICATE KEY UPDATE
工作良好,但当我使用batchupdate()
进行相同的查询时,它会产生错误。错误如下:
Testcase: testVehicleTracking(com.em.ert.test.TrackingServiceTest): cause a ERRORPreparedStatementCallback;错误的SQL语法[INSERT INTO test_tracking (sino, material_id, material_type, vehicle_position, rundown_num, msg_type, msg_status, msg_timestamp) VALUES(?(?, ?, ?, ?, ?, ?)[重复键更新];嵌套异常是java.sql.BatchUpdateException:你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,了解在"at line 1
"附近使用的正确语法。
我不明白为什么ON DUPLICATE KEY UPDATE
不能与batchupdate()一起工作。理想情况下应该如此,因为在我看来,在工作中没有什么不同。
我应该做些什么来实现这个目标?
您缺少列赋值 col_name = value
在 ON DUPLICATE KEY UPDATE
子句之后。
来自MySQL官方参考手册:
13.2.6 INSERT Statement
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.6.2 INSERT…ON DUPLICATE KEY UPDATE语句