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

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

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

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

Ответ 1

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

В некоторых реализациях SQL это будет действительным SQL:

INSERT INTO foo;

Это недействительно в SQLite. Вы должны указать хотя бы один столбец:

INSERT INTO foo (somecol) VALUES (NULL);

Следовательно, в случае, если вы передаете пустой ContentValues в insert(), для Android и SQLite требуется некоторый столбец, который можно назначить NULL. Если у вас есть несколько таких столбцов, выберите один из выбранных вами механизмов выбора: бросок кубиков, Magic 8-Ball (TM), флип из флага, флип из ячейки и т.д.

Лично я просто запретил пропускать пустой ContentValues до insert(), но они не спрашивали меня...: -)