2013-01-02 3 views
1

Я использую batchUpdate() для вставки нескольких записей в таблицу. В соответствии с требованием, если есть дублирующее значение для первичного ключа при вставке, оно должно быть обновлено с последними полученными данными, поэтому я пытался использовать ON DUPLICATE KEY UPDATE в заявлении INSERT. ON DUPLICATE KEY UPDATE работает хорошо, когда я использую одну вставку, но она дает ошибку, когда я использую batchupdate() для того же запроса. Ошибка заключается в следующем:MySQL Batchupdate() с ON DUPLICATE KEY UPDATE

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(). В идеале это должно быть, потому что в работе нет ничего другого, насколько я вижу.

Что я должен делать для достижения этого?

+0

Не могли бы вы добавить код? –

ответ

2

Вам не хватает назначений столбцов после ВКЛЮЧЕНА КЛЮЧЕВОЙ ОПЕРАЦИИ DUPLICATE.

От 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

+1

Спасибо, что работал ... должен был пройти документацию еще раз ... – srahul07

Смежные вопросы