Android SQLite:insert / replace方法中的nullColumnHack参数


96

Android SDK提供了一些使用SQLite操纵数据的便捷方法。但是插入替换方法都使用一些nullColumnHack我不理解的参数。

该文档通过以下内容对此进行了解释,但是如果一个表具有多个允许的列NULL怎么办?我真的不明白:/

SQL不允许插入完全空的行,因此,如果initialValues为空,则此列[ / row for replace ]将被明确分配一个NULL值。

Answers:


195

假设您有一个名为的表foo,其中所有列都允许NULL值或具有默认值。

在某些SQL实现中,这将是有效的SQL:

INSERT INTO foo;

在SQLite中无效。您必须至少指定一列:

INSERT INTO foo (somecol) VALUES (NULL);

因此,在你传递一个空的情况下ContentValues,以insert(),Android和SQLite的需要一些列安全地分配NULL给。如果您有多种此类列可供选择,请通过您选择的选择机制选择其中一种:骰子卷,Magic 8-Ball(TM),掷硬币,隔间伴侣翻转等。

就个人而言,I'd've只是做是非法的传递一个空ContentValuesinsert(),但他们没有问我... :-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.