Inhalt in Mysql DB schreiben und gleiche Zeilen Überschreiben

Silver83

Grünschnabel
Hallo Leute,
Habe ein kleines Problem mit Mysql.
Ich möchte den Inhalt einer csv in eine Mysql DB schreiben.
Soweit so gut
Csv eingelesen und gesplittet teile in Strings und ab an die DB
Mit

Code:
.executeUpdate("insert into XXX.test"+"(date,time,caller,called,duration)"+"values
('"+date+"','"+time+"','"+caller+"','"+called+"','"+duration+"')");

Jedoch werden bei jedem run alle Daten in die DB geschrieben und hier ist mein Problem.
Ich möchte das gleiche Daten, Daten die im CSV und in der DB gleich sind, in der DB Überschrieben werden und keinen neuen Eintrag für diese anlegen.

Kann mir hier bitte wer weiterhelfen?
Danke schon mal für euer Bemühen
MFG
Silver
 
Danke für die schnelle Antwort,
ON DUPLICATE KEY UPDATE
hört sich sehr gut an, leider verstehe ich hier die Syntax nicht:confused:
In der DB is "ID" der PRIMARY key und auto_increment. alles andere (date,time,caller,called,duration) ist UNIQE.

Ich sehe den Wald vor lauter Bäumen nicht mehr

MFG
Silver
 
Die Syntax isst an sich recht simpel, Du schreibst ein Insert-statement und hängst dann einfach das ON DUPLICATE KEY UPDATE dran, beispielsweise so :
Code:
INSERT INTO foo (a,b,c,d,e) VALUES (1,2,3,4,5)
ON DUPLICATE KEY UPDATE a = 1, b = 2, c = 3, d = 4, e = 5
Problematisch ist das ganze nur, da du mehrere (alle) Werte hast die eindeutig sind, wenn du nun einen Datensatz einfügst bei dem nicht nur ein sondern mehrere Werte mit mehr als einem Datensatz übereinstimmen, sprich a stimmt mit einen Datensatz überein und b mit einem anderen, so wird nur ein Datensatz aktualisiert.
Um zu deinem Code zurückzukehren: Wenn alle deine Spalten als UNIQUE markiert sind hat das zur Folge, das in keinem Datensatz irgendein Wert mit dem Wert aus der selben Spalte in einem anderen Datensatz übereinstimmen darf, ich weiß nicht worum es in deiner Anwendung genau geht, aber da es offensichtlich um die Protokollierung von Kontakten geht, kann ich mir kaum vorstellen, dass das so gewollt ist.
Ganz abgesehen von den Problemen die daraus entstehen würden, man könnte sich zwar sicherlich ein Statement basteln das alle Datensätze mit einem doppelten Eintrag aktualisiert, nur hätte man dann mehrere Datensätze mit exakt den selben Daten (abgesehen von der id oder so) womit UNIQUE ad absurdum geführt wäre.
Wenn es nur darum geht identische Datensätze zu vermeiden und Du in Deiner CSV-Datei und in der Datenbank einen eindeutigen Schlüssel hast, so setze diesen einfach als UNIQUE oder gleich als Primary Key oder, wenn dies nicht der Fall sein sollte, kannst Du auch einen aus mehreren Spalten zusammengesetzten Schlüssel verwenden.

Wenn ich Dich falsch verstanden oder einen Denkfehler gemacht habe, so bitte ich dies zu entschuldigen, die Nacht war ausgesprochen kurz. :)
 

Neue Beiträge

Zurück