Android SQLite: nullColumnHack-Parameter in Einfüge- / Ersetzungsmethoden

96

Das Android SDK bietet einige praktische Methoden zum Bearbeiten von Daten mit SQLite. Sowohl die Einfüge- als auch die Ersetzungsmethode verwenden jedoch einige nullColumnHackParameter, deren Verwendung ich nicht verstehe.

In der Dokumentation wird dies im Folgenden erläutert. Was ist jedoch, wenn eine Tabelle mehrere Spalten enthält, die dies zulassen NULL? Ich verstehe es wirklich nicht: /

In SQL kann keine vollständig leere Zeile eingefügt werden. Wenn initialValues ​​also leer ist, wird dieser Spalte [ / Zeile zum Ersetzen ] explizit ein NULLWert zugewiesen .

Sack
quelle

Antworten:

195

Angenommen, Sie haben eine Tabelle mit dem Namen, fooin der alle Spalten entweder NULLWerte zulassen oder Standardeinstellungen haben.

In einigen SQL-Implementierungen wäre dies gültiges SQL:

INSERT INTO foo;

Das ist in SQLite nicht gültig. Es muss mindestens eine Spalte angegeben sein:

INSERT INTO foo (somecol) VALUES (NULL);

Für den Fall, dass Sie ein Leerzeichen ContentValuesan übergeben insert(), benötigen Android und SQLite daher eine Spalte, der Sie sicher zuweisen können NULL. Wenn Sie mehrere solcher Spalten zur Auswahl haben, wählen Sie eine über den Auswahlmechanismus Ihrer Wahl aus: Würfeln, Magic 8-Ball (TM), Münzwurf, Cubicle Mate Flip usw.

Persönlich hätte ich es gerade illegal gemacht, ein Leerzeichen an ContentValueszu übergeben insert(), aber sie haben mich nicht gefragt ... :-)

CommonsWare
quelle