2010-04-18 19 views
91

L'SDK Android ha alcuni metodi convenienti per la manipolazione dei dati con SQLite. Tuttavia, entrambi i metodi insert e replace utilizzano alcuni parametri nullColumnHack che non conosco.SQLite Android: parametro nullColumnHack nei metodi di inserimento/sostituzione

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

SQL non consente l'inserimento di una riga completamente vuota, quindi se initialValues ​​è vuoto, questa colonna [/riga per sostituire] sarà esplicitamente essere assegnato un valore NULL.

risposta

188

Supponiamo di avere una tabella denominata foo dove tutte le colonne o consentire NULL valori o hanno valori di default.

In alcune implementazioni di SQL, questo sarebbe SQL valida:

INSERT INTO foo; 

Questo non è valido in SQLite. Bisogna avere almeno una colonna specificata:

INSERT INTO foo (somecol) VALUES (NULL); 

Quindi, nel caso in cui si passa un vuoto ContentValues a insert(), Android e SQLite bisogno di qualche colonna che è sicuro per assegnare NULL a. Se ne hai diverse tra cui scegliere, sceglierne una tramite il meccanismo di selezione di tua scelta: lancio dei dadi, Magic 8-Ball (TM), coin flip, cubetto muovere, ecc.

Personalmente, I ' ho semplicemente reso illegale passare un numero vuoto ContentValues a insert(), ma non mi hanno chiesto ... :-)