2010-04-18 6 views
91

Zestaw SDK dla systemu Android ma kilka wygodnych metod manipulowania danymi za pomocą SQLite. Jednak zarówno metody insert i replace używają jakiegoś parametru nullColumnHack, którego użycia nie rozumiem.Android SQLite: parametr nullColumnHack w metodach wstawiania/zamiany

W dokumentacji wyjaśniono, co następuje, ale co zrobić, jeśli tabela ma wiele kolumn, które pozwalają na NULL? I naprawdę nie rozumiem:/

SQL nie zezwala na wstawienie całkowicie pusty wiersz, więc jeśli initialValues ​​jest pusta, ta kolumna [/wiersz dla zastąpienia] będzie jednoznacznie przypisać wartość NULL.

Odpowiedz

188

Załóżmy, że mamy tabelę o nazwie foo gdzie wszystkie kolumny zezwolić NULL wartości lub mają domyślne.

W niektórych implementacjach SQL, to byłoby ważne SQL:

INSERT INTO foo; 

To nie jest ważne w SQLite. Musisz mieć co najmniej jedną kolumnę określone: ​​

INSERT INTO foo (somecol) VALUES (NULL); 

Stąd, w przypadku, gdy mijamy pusty ContentValues do insert(), Android i SQLite potrzebują kolumny, które jest bezpieczne, aby przypisać do NULL. Jeśli masz do wyboru kilka takich kolumn, wybierz jedną z wybranych przez ciebie mechanizmów wyboru: rzut kostką, Magic 8-Ball (TM), rzut monetą, flipa klocków itp.

Osobiście " Po prostu zabroniono przekazywania pustego ContentValues do insert(), ale nie pytali mnie ... :-)