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 № 1Brakuje 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