/ / Syntaxfehler beim Erstellen der Android-SQLite-Tabelle in der Datenbank - Android, Android-SQLite

Syntaxfehler beim Erstellen von Android SQLite-Tabelle in der Datenbank - Android, Android-SQLite

Ich habe eine Tabelle gemäß den folgenden Anforderungen erstellt:

  1. Später verwende ich in meinem Code Cursor, um eine Spalte _ID in der Tabelle zu erstellen

  2. Da ich nur meinen eigenen Primärschlüssel verwenden möchte, stelle ich meine Spalte "Barcode" als einzigen Primärschlüssel ein.

Die Tabelle sieht also wie folgt aus:

CREATE TABLE product (
_id INTEGER,
barcode TEXT PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
categoryid INTEGER NOT NULL,
FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

Die obige Tabelle wurde korrekt erstellt, aber ich brauche die _id -Spalte, um sie automatisch einzuinkeln, also ändere ich die Tabelle wie folgt:

CREATE TABLE product (
_id INTEGER AUTOINCREMENT NOT NULL,
barcode TEXT PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
categoryid INTEGER NOT NULL,
FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

Beim Debuggen meiner App erhalte ich folgende Fehlermeldung:

near "AUTOINCREMENT": syntax error (code 1): , while compiling:
CREATE TABLE product (_id INTEGER AUTOINCREMENT NOT NULL,barcode TEXT PRIMARY KEY NOT NULL,title TEXT NOT NULL,categoryid INTEGER NOT NULL, FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

Ich brauche die Barcode-Spalte, um der einzige Primärschlüssel zu sein, aber die _ID-Spalte, um gleichzeitig automatisch einzugehen.

Ich könnte einen zusammengesetzten Primärschlüssel verwenden, der aus besteht_ID und Barcode, also kann _ID ohne Probleme auf Autoincrement gesetzt werden. Dabei könnte jedoch mehr als ein Produkt mit demselben Barcode (mit anderer _ID) eingefügt werden, und ich möchte, dass Barcode in der gesamten Tabelle eindeutig ist.

Wie kann man das loswerden?

Antworten:

2 für die Antwort № 1

Können Sie ROWID in dieser Situation nicht verwenden? Es erledigt alles, was Sie fragen, und ist in die meisten sqlite-Tabellen eingebaut. Wählen Sie in Ihren Abfragen einfach X, Y, ROWID aus Z aus.


0 für die Antwort № 2

vom link: https://www.sqlite.org/autoinc.html, Auto-Inkrement kann nicht auf ein nicht primäres Feld gesetzt werden. Ich denke, Sie können die folgende Lösung ausprobieren. Es könnte helfen: SQLite-Inkrementierungsfeld für Nicht-Primärschlüssel