2010-04-18 12 views
91

El SDK de Android tiene algunos métodos de conveniencia para la manipulación de datos con SQLite. Sin embargo los dos métodos insert y replace utilizan algún parámetro que nullColumnHack uso que no entiendo.SQLite Android: parámetro nullColumnHack en insertar/reemplazar los métodos

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

SQL no permite la inserción de una fila vacía por completo, por lo que si initialValues ​​está vacía, esta columna [/fila para reemplazar] explícitamente se le asignará un valor NULL.

Respuesta

188

Supongamos que usted tiene una tabla llamada foo, donde todas las columnas o bien permitir que NULL valores o tienen valores predeterminados.

En algunas implementaciones de SQL, esto habría SQL válida:

INSERT INTO foo; 

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

INSERT INTO foo (somecol) VALUES (NULL); 

Por lo tanto, en el caso en el que se pasa un vacío ContentValues a insert(), Android y SQLite necesitar algo de columna que es seguro para asignar a NULL. Si tiene varias de estas columnas para elegir, elegir uno a través del mecanismo de selección de su elección: tirada de los dados, Magic 8-Ball (TM), lanzamiento de moneda, cubículo compañero de flip, etc.

En lo personal, yo d'VE acaba de hacer que sea ilegal para pasar un vacío ContentValues a insert(), pero no me pidió ... :-)