Android SQLite: parameter nullColumnHack dalam metode sisipkan / ganti

96

Android SDK memiliki beberapa metode praktis untuk memanipulasi data dengan SQLite. Namun metode insert dan replace menggunakan beberapa nullColumnHackparameter yang penggunaannya tidak saya mengerti.

Dokumentasi menjelaskannya sebagai berikut, tetapi bagaimana jika tabel memiliki beberapa kolom yang memungkinkan NULL? Saya benar-benar tidak mengerti: /

SQL tidak mengizinkan penyisipan baris yang benar-benar kosong, jadi jika initialValues ​​kosong, kolom [ / baris untuk diganti ] ini akan secara eksplisit diberi NULLnilai.

menyodok
sumber

Jawaban:

196

Misalkan Anda memiliki tabel bernama di foomana semua kolom mengizinkan NULLnilai atau memiliki default.

Dalam beberapa implementasi SQL, ini akan menjadi SQL yang valid:

INSERT INTO foo;

Itu tidak valid di SQLite. Anda harus memiliki setidaknya satu kolom yang ditentukan:

INSERT INTO foo (somecol) VALUES (NULL);

Oleh karena itu, dalam kasus di mana Anda melewatkan kosong ContentValueske insert(), Android dan SQLite memerlukan beberapa kolom yang aman untuk ditetapkan NULL. Jika Anda memiliki beberapa kolom untuk dipilih, pilih salah satu melalui mekanisme pemilihan pilihan Anda: lemparan dadu, Magic 8-Ball (TM), lempar koin, lempar bilik pasangan, dll.

Secara pribadi, I'd've hanya membuatnya ilegal untuk lulus kosong ContentValuesuntuk insert(), tetapi mereka tidak meminta saya ... :-)

CommonsWare
sumber