SQLite Android: parametro nullColumnHack nei metodi di inserimento / sostituzione


96

L'SDK Android ha alcuni metodi convenienti per manipolare i dati con SQLite. Tuttavia, entrambi i metodi di inserimento e sostituzione utilizzano alcuni nullColumnHackparametri il cui utilizzo non comprende.

La documentazione lo spiega con quanto segue, ma cosa succede se una tabella ha più colonne che lo consentono NULL? Davvero non capisco: /

SQL non consente l'inserimento di una riga completamente vuota, quindi se initialValues ​​è vuoto, a questa colonna [ / row for replace ] verrà esplicitamente assegnato un NULLvalore.

Risposte:


196

Supponiamo di avere una tabella denominata in foocui tutte le colonne consentono NULLvalori o hanno valori predefiniti.

In alcune implementazioni SQL, questo sarebbe SQL valido:

INSERT INTO foo;

Non è valido in SQLite. Devi avere almeno una colonna specificata:

INSERT INTO foo (somecol) VALUES (NULL);

Quindi, nel caso in cui passi un vuoto ContentValuesa insert(), Android e SQLite necessitano di una colonna che sia sicura da assegnare NULL. Se hai diverse colonne di questo tipo tra cui scegliere, scegline una tramite il meccanismo di selezione che preferisci: lancio dei dadi, Magic 8-Ball (TM), lancio della moneta, capovolgimento del cubicolo, ecc.

Personalmente, avrei semplicemente reso illegale passare un vuoto ContentValuesa insert(), ma non me l'hanno chiesto ... :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.