Android SQLite: parámetro nullColumnHack en métodos de inserción / reemplazo

96

El SDK de Android tiene algunos métodos prácticos para manipular datos con SQLite. Sin embargo, tanto el método de inserción como el de reemplazo usan algún nullColumnHackparámetro cuyo uso no entiendo.

La documentación lo explica con lo siguiente, pero ¿qué pasa si una tabla tiene varias columnas que lo permiten NULL? Realmente no lo entiendo :/

SQL no permite insertar una fila completamente vacía, por lo que si initialValues ​​está vacía, a esta columna [ / fila para reemplazar ] se le asignará explícitamente un NULLvalor.

dar un toque
fuente

Respuestas:

195

Supongamos que tiene una tabla denominada foodonde todas las columnas permiten NULLvalores o tienen valores predeterminados.

En algunas implementaciones de SQL, esto sería SQL válido:

INSERT INTO foo;

Eso no es válido en SQLite. Debe tener al menos una columna especificada:

INSERT INTO foo (somecol) VALUES (NULL);

Por lo tanto, en el caso de que pase un vacío ContentValuesa insert(), Android y SQLite necesitan alguna columna que sea segura para asignar NULL. Si tiene varias de estas columnas para elegir, elija una a través del mecanismo de selección de su elección: lanzamiento de dados, Magic 8-Ball (TM), lanzamiento de moneda, lanzamiento de compañero de cubículo, etc.

Personalmente, hubiera hecho ilegal pasar un vacío ContentValuesa insert(), pero no me preguntaron ... :-)

CommonsWare
fuente