В Android SDK есть некоторые удобные методы для управления данными с помощью SQLite. Однако методы insert и replace используют некоторый параметр nullColumnHack
, использование которого я не понимаю.
Документация объясняет это следующим: но что, если таблица имеет несколько столбцов, которые позволяют NULL
? Я действительно не понимаю:/
SQL не позволяет вставить полностью пустую строку, поэтому, если initialValues пуст, этому столбцу [/row for replace] будет явно присвоено значение
NULL
.
Предположим, что у вас есть таблица с именем 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()
, но они не спрашивали меня...: -)