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

96

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

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

SQL не позволяет вставлять полностью пустую строку, поэтому, если initialValues ​​пусто, этому столбцу [ / row for replace ] будет явно присвоено NULLзначение.

тыкать
источник

Ответы:

196

Предположим, у вас есть таблица с именем, в 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(), но они меня не спрашивали ... :-)

CommonsWare
источник