SQLiteDatabase.CONFLICT_IGNORE-Kommentar soll genauso funktionieren, wie Sie es beobachtet haben. Bei dem Versuch, einzufügen, wenn keine Zeile in Konflikt ist, wird eine neue Zeile mit den angegebenen Werten eingefügt und die ID der neu eingefügten Zeile zurückgegeben. Wenn andererseits bereits eine Zeile mit einem Konflikt vorliegt (mit demselben eindeutigen Schlüssel), werden die eingehenden Werte ignoriert, und die vorhandene Zeile wird beibehalten, und der Rückgabewert wird -1 sein, um auf ein Konfliktszenario hinzuweisen. Um weitere Details zu erfahren und zu verstehen, wie man mit diesem Rückgabewert umgeht, lesen Sie bitte Android / SQLite: Einfügen - Tabellenspalten aktualisieren, um den Bezeichner beizubehalten
Die von mir verwendete Problemumgehung verwendet insertOrThrow
anstelle von insertWithOnConflict
und explizit SQLiteConstraintException
. Sie müssen es explizit abfangen, da es von RuntimeException
erbt.
Ich musste diese Problemumgehung verwenden, weil insert
das Datenbankschema bei einem Konflikt in den Protokollen gespeichert hat, und das war inakzeptabel.
Ich bin immer noch in der Lage, die Zeile in die Datenbank eingefügt, die CONFLICT_IGNORE funktioniert nicht wie erwartet @ Tom ist richtig, aber ich bin mir nicht sicher, ob das Problem behoben wurde