SQLite INSERT OR REPLACE INTO macht neuen Eintrag?!

Disq

Mitglied
Hallo Leute,

wie ihr es aus dem Titel schon entnehmen könnt, erstellt INSERT OR REPLACE INTO ein neuen Eintrag ins Datenbank obwohl dieser schon existiert...

Die Tabelle hat folgende Spalten : rowid(PK), tableId, productId, amaunt

Ich möchte falls der Datensatz mit dem tableId und dem productId schon vorhanden ist, die amaunt um amaunt vergrößern

Mein Statement sieht wie folgt aus:
Code:
stmt.execute("INSERT OR REPLACE INTO 'main'.'cancel_order' ('tableId','productId','amaunt')VALUES ("+tableId+","+productId+",(SELECT CASE WHEN exists"
           + "(SELECT amaunt  FROM 'main'.'cancel_order' WHERE productId="+productId+" AND tableId = "+tableId+") THEN (SELECT amaunt  FROM 'main'.'cancel_order' "
           + "WHERE productId="+productId+" AND tableId = "+tableId+")+"+amaunt+" ELSE "+amaunt+" END));");

Ich füge als erstes diesen Datensatz ein:
tableId: 0
productId: 13
amaunt: 1

Wenn ich o.g. stmt.execute durchführe (mit amaunt=1) macht der Datenbank ein neuen Datensatz und fügt
tableId: 0
productId: 13
amaunt: 2
und im Datenbank steht nun:
rowId tableId productId amaunt
1 0 13 1
2 0 13 2
 
Ich habe das Problem gelöst! Kann geschlossen werden.
Zur Problemlösung:
Ich habe eine Tabelle gehabt mit 2 Werten, da hatte ich ebenfalls INSERT OR REPLACE INTO statement gehabt. Da hat es geklappt gehabt. Beim untersuchen ist mir aufgefallen, dass ich bei der anderen Tabelle mit einem tableId und amaunt, tableId auf UNIQUE gesetzt habe. Da ich bei der jetzigen Tabelle aber 2 id's habe und diese nicht beide in konstellation auf UNIQUE gesetzt werden können, habe ich einfach die beiden id's (tableId und productId) als PRIMARY KEY definiert. Nun klappt alles so wie es klappen soll...

Es ist aber schon komisch, dass REPLACE nur dann funktionert, wenn es sich bei den ID's um UNIQUE Daten handelt...
 

Zurück
Oben