Android SQLite: параметр nullColumnHack в методах вставки / замены - PullRequest
94 голосов
/ 18 апреля 2010

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

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

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

1 Ответ

192 голосов
/ 18 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...