Was ist der Typ für einen BOOL-Wert in SQLite? Ich möchte TRUE / FALSE-Werte in meiner Tabelle speichern.
Ich könnte eine Spalte von INTEGER erstellen und darin Werte 0 oder 1 speichern, aber es ist nicht der beste Weg, den BOOL-Typ zu implementieren.
Gibt es einen Weg?
Vielen Dank.
Antworten:
Es gibt keinen nativen booleschen Datentyp für SQLite. Gemäß dem Datentyp-Dokument :
quelle
In SQLite können Sie am besten die Ganzzahlen 0 und 1 verwenden, um false und true darzustellen. Sie können den Spaltentyp folgendermaßen deklarieren:
Lassen Sie das weg,
NOT NULL
wenn SieNULL
zusätzlich zu 0 und 1 zulassen möchten .Die Verwendung des Typnamens dient
BOOLEAN
hier der Lesbarkeit. Für SQLite ist dies nur ein Typ mit NUMERISCHER Affinität .Beachten Sie, dass CHECK-Einschränkungen seit SQLite 3.3.0 (2006) unterstützt werden.
Hier sind einige Beispiele für INSERTs, die funktionieren: (Beachten Sie, wie Zeichenfolgen und Gleitkommazahlen als Ganzzahlen analysiert werden.)
und einige, die scheitern werden:
quelle
Boolescher SQLite- Datentyp:
SQLite verfügt nicht über eine separate Boolesche Speicherklasse. Stattdessen werden Boolesche Werte als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.
Sie können Boolesche Werte auf folgende Weise in int konvertieren:
Sie können int wie folgt zurück in boolean konvertieren:
Wenn Sie SQLite erkunden möchten, finden Sie hier ein Tutorial .
Ich habe eine Antwort gegeben hier . Es funktioniert für sie.
quelle
Boolean flag2 = (intValue != 0);
Die Verwendung des Datentyps Integer mit den Werten 0 und 1 ist am schnellsten.
quelle
Weiter zu Ericas Antwort. CHECK-Einschränkungen können eine pseudo-boolesche Spalte aktivieren, indem ein TEXT-Datentyp erzwungen wird und nur fallspezifische TRUE- oder FALSE-Werte zugelassen werden, z
quelle
Wenn Sie jedoch eine Reihe von ihnen speichern möchten, können Sie sie bitverschieben und alle als ein Int speichern, ähnlich wie bei Unix-Dateiberechtigungen / -Modi.
Im Modus 755 bezieht sich beispielsweise jede Ziffer auf eine andere Benutzerklasse: Eigentümer, Gruppe, Öffentlich. Innerhalb jeder Ziffer wird 4 gelesen, 2 wird geschrieben, 1 wird ausgeführt, so dass 7 alle wie Binär 111 sind. 5 wird gelesen und ausgeführt, also 101. Erstellen Sie Ihr eigenes Codierungsschema.
Ich schreibe nur etwas zum Speichern von TV-Programmdaten aus Schedules Direct und habe die binären oder Ja / Nein-Felder: Stereo, HDTV, Neu, Ei, Untertitel, Dolby, SAP auf Spanisch, Saisonpremiere. Also 7 Bits oder eine ganze Zahl mit maximal 127. Ein Zeichen wirklich.
Ein AC-Beispiel von dem, woran ich gerade arbeite. has () ist eine Funktion, die 1 zurückgibt, wenn sich die 2. Zeichenfolge in der ersten befindet. inp ist die Eingabezeichenfolge für diese Funktion. misc ist ein vorzeichenloses Zeichen, das auf 0 initialisiert ist.
Also speichere ich 7 Boolesche Werte in einer ganzen Zahl mit Platz für mehr.
quelle
Sie können die obigen Gleichungen folgendermaßen vereinfachen:
Wenn die int-Darstellung (sqlInt) des Booleschen Werts 0 (falsch) ist, ist der Boolesche Wert (Flag) falsch, andernfalls ist er wahr.
Prägnanter Code ist immer besser zu bearbeiten :)
quelle
Eine andere Möglichkeit ist eine TEXT-Spalte. Konvertieren Sie dann den booleschen Wert zwischen Booleschem Wert und String, bevor / nachdem Sie den Wert aus der Datenbank gespeichert / gelesen haben.
Ex. Du hast
"boolValue = true;
"Zu String:
Und zurück zum Booleschen:
quelle