Android SQLite: parametr nullColumnHack w metodach insert / replace


96

Android SDK ma kilka wygodnych metod manipulowania danymi za pomocą SQLite. Jednak zarówno metody insert, jak i replace używają jakiegoś nullColumnHackparametru, którego użycia nie rozumiem.

Dokumentacja wyjaśnia to w następujący sposób, ale co się stanie, jeśli tabela ma wiele kolumn, które na to pozwalają NULL? Naprawdę nie rozumiem: /

SQL nie pozwala na wstawienie całkowicie pustego wiersza, więc jeśli initialValues ​​jest puste, ta kolumna [ / wiersz do zamiany ] będzie jawnie miała przypisaną NULLwartość.

Odpowiedzi:


196

Załóżmy, że masz tabelę o nazwie, w fooktórej wszystkie kolumny dopuszczają NULLwartości lub mają wartości domyślne.

W niektórych implementacjach SQL byłby to poprawny SQL:

INSERT INTO foo;

To nie działa w SQLite. Musisz mieć określoną co najmniej jedną kolumnę:

INSERT INTO foo (somecol) VALUES (NULL);

Dlatego w przypadku przekazania pustego elementu ContentValuesdo insert(), Android i SQLite potrzebują jakiejś kolumny, do której można bezpiecznie przypisać NULL. Jeśli masz do wyboru kilka takich kolumn, wybierz jedną za pomocą wybranego mechanizmu wyboru: rzut kostką, Magic 8-Ball (TM), rzut monetą, odwrócenie kostki itp.

Osobiście właśnie uczyniłbym nielegalnym przekazywanie pustego miejsca ContentValuesdo insert(), ale mnie nie pytali ... :-)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.