2017-05-10 5 views
0

Ich erstelle eine Tabelle in SQLite-Datenbank, die nur eine einzige Daten speichert, andernfalls wenn Daten in der Tabelle vorhanden sind, sollte es vor dem Einfügen einer neuen Daten gelöscht werden.SQL LITE: Ein Zeilenbeschränkung

Dies ist die Syntax i die Tabelle zu erstellen verwendet

CREATE TABLE my_login_info (
    id  BOOLEAN PRIMARY KEY 
        DEFAULT True 
        CONSTRAINT one_row_only CHECK (id) 
        NOT NULL, 
    username STRING, 
    password STRING 
); 

aber wenn ich die Daten in die Tabelle einzufügen bin versucht, während der Tisch leer ist, gab es einen Fehler.

Error while committing new row: CHECK constraint failed: one_row_only 

Irgendeine Idee, was ist das verursachte das Problem?

+1

MySQL oder SQLite einen kurzen Hash zeigt? Bitte entfernen Sie nicht verwandte Datenbank-Tags. –

+3

Mögliches Duplikat von [Stellen Sie sicher, dass die SQLite-Tabelle nur eine Zeile enthält] (http://stackoverflow.com/questions/33104101/ensure-sqlite-table-only-has-one-row) –

+0

Sie brauchen wahrscheinlich SQLite nicht, wenn Sie beabsichtigen nur einen einzelnen Wert zu speichern. Wenn Sie aktualisieren möchten, verwenden Sie einfach nicht INSERT. Verwenden UPDATE –

Antwort

0

Sie können INSERT OR REPLACE verwenden, um einen neuen Datensatz einfügen oder die vorhandenen aktualisieren, die das Schlüsselfeld übereinstimmt, zB:

INSERT OR REPLACE INTO my_login_info (id,username,hash) 
VALUES (true,someuser,somehash) 

So stellen Sie sicher, dass Sie als unverschlüsselt das Passwort nicht lagern. Speichere nur einen starken Hash. Wenn Sie den Hash für die Authentifizierung nicht benötigen, können Sie einen kurzen Hash speichern, dh nur einen Teil des vollständigen Hash.

das ist, was git zum Beispiel der Fall, wenn es für jede Dateiversion anstelle des vollständigen Hash