Android SQLite: parâmetro nullColumnHack em métodos de inserção / substituição

96

O Android SDK tem alguns métodos convenientes para manipular dados com SQLite. No entanto, os métodos de inserção e substituição usam alguns nullColumnHackparâmetros cujo uso eu não entendo.

A documentação explica com o seguinte, mas e se uma tabela tiver várias colunas que permitem NULL? Eu realmente não entendo: /

O SQL não permite inserir uma linha completamente vazia, então se initialValues ​​estiver vazio, esta coluna [ / linha para substituição ] receberá um NULLvalor explicitamente .

cutucar
fonte

Respostas:

195

Vamos supor que você tenha uma tabela chamada fooonde todas as colunas permitem NULLvalores ou têm padrões.

Em algumas implementações de SQL, isso seria um SQL válido:

INSERT INTO foo;

Isso não é válido no SQLite. Você deve ter pelo menos uma coluna especificada:

INSERT INTO foo (somecol) VALUES (NULL);

Portanto, no caso em que você passa um vazio ContentValuespara insert(), o Android e o SQLite precisam de alguma coluna que seja segura para atribuir NULL. Se você tiver várias dessas colunas para escolher, escolha uma através do mecanismo de seleção de sua escolha: lançamento de dados, Magic 8-Ball (TM), cara de moeda, cara de cubículo, etc.

Pessoalmente, teria tornado ilegal passar um vazio ContentValuespara insert(), mas eles não me perguntaram ... :-)

CommonsWare
fonte