/ / MySQL Batchupdate () z ON DUPLICATE KEY UPDATE - java, mysql, spring, batch-updates

MySQL Batchupdate () z ON DUPLICATE KEY UPDATE - java, mysql, spring, batch-updates

ja używam batchUpdate() wstawić wiele rekordów do tabeli. Zgodnie z wymogiem, jeśli istnieje duplikat klucza podstawowego podczas wstawiania, należy go zaktualizować o najnowsze otrzymane dane, dlatego próbowałem użyć ON DUPLICATE KEY UPDATE w INSERT komunikat. The ON DUPLICATE KEY UPDATE działa dobrze, gdy używam pojedynczej wkładki, ale daje błąd, gdy używam batchupdate() dla tego samego zapytania. Błąd jest następujący:

Testcase: testVehicleTracking (com.em.ert.test.TrackingServiceTest): Spowodował błąd PreparedStatementCallback; zła gramatyka SQL [INSERT INTO test_tracking (sino, material id, material_type, vehicle_position, rundown_num, msg_type, msg_status, msg_timestamp) WARTOŚCI (?,?,?,?,?,?,?,?) NA DUPLIKOWANEJ AKTUALIZACJI KLUCZYKA]; Zagnieżdżony wyjątek to java.sql.BatchUpdateException: Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "" w linii 1

Nie rozumiem dlaczego ON DUPLICATE KEY UPDATE nie działa z batchupdate (). Idealnie powinno być, ponieważ nie ma nic innego w pracy, o ile widzę.

Co powinienem robić, aby to osiągnąć?

Odpowiedzi:

2 dla odpowiedzi № 1

Brakuje przypisania do kolumny po NA klauzuli DUPLICATE KEY UPDATE.

Od Podręcznik MySQL:

13.2.5. INSERT Składnia

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 Składnia
13.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Składnia