Android SQLite: параметр nullColumnHack у методах вставки / заміни


96

Android SDK має кілька зручних методів для обробки даних за допомогою SQLite. Однак і методи вставки, і заміни використовують якийсь nullColumnHackпараметр, використання якого я не розумію.

Документація пояснює це наступним чином, але що, якщо таблиця має кілька стовпців, які дозволяють NULL? Я справді не розумію: /

SQL не дозволяє вставляти повністю порожній рядок, тому, якщо InitiValues ​​порожній, цьому стовпцю [ / рядок для заміни ] буде явно присвоєно NULLзначення.

Відповіді:


195

Припустимо, у вас є таблиця з іменем, fooде всі стовпці або допускають NULLзначення, або мають типові значення.

У деяких реалізаціях SQL це буде дійсним SQL:

INSERT INTO foo;

Це невірно в SQLite. Потрібно вказати принаймні один стовпець:

INSERT INTO foo (somecol) VALUES (NULL);

Отже, в разі , коли ви передаєте порожній , ContentValuesщоб insert(), Android і SQLite потрібна колонка , яка є безпечною для правонаступникаNULL в. Якщо у вас є кілька таких стовпчиків на вибір, виберіть одну за вибраним вами механізмом відбору: кидок кубиків, Magic 8-Ball (TM), фліп монети, фліп кабінки і т.д.

Особисто I'd've тільки що зробив це незаконно , щоб передати порожній , ContentValuesщоб insert(), але вони мене не питали ... :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.