因此,当我尝试将已删除条目标记为“已删除”值“1”而不是删除它时,就会发生这种情况。
我使用 ALTER TABLE "+TABLE_NAME+"ADD COLUMN "+NEW_COLUMN_NAME+""+type+";"); 向应用中的数据库添加了一列
,并在数据库提供程序中进行了其他适当的更改(当插入insert 0时),然而,奇怪的事情发生了。
添加后,会发生以下情况:
SELECT * FROM TABLE_NAME
- 返回所有行(按预期)SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME=1
返回 NEW_COLUMN_NAME=1 的行(如预期)。 然而,SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME=0
返回新插入的行(如预期)。SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME!=1
仅返回新插入的行(不返回旧行)SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME=null
不返回任何内容。
Android 不符合 http://www.sqlite.org/lang_expr.html或者我错过了什么?
在 Android 2.2 模拟器中运行。
谢谢。
最佳答案
这个:
SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME = null
几乎在任何数据库中都会返回一个空行集,因为在 SQL 中,表达式 NULL = x
对于所有 x
都是 false(甚至是 x
为 NULL)。试试这个:
SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME IS NULL
类似的 NULL 问题也适用于此:
SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME != 1
所以尝试一下:
SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME != 1 OR NEW_COLUMN_NAME IS NULL
相反。
这不是 SQLite 或 Android 特有的任何内容,这只是正常的 SQL 行为。如果您绝对不需要在列中允许 NULL 值,请使用 NOT NULL
(可能还有默认值)创建它们,以避免一些困惑和挫败感。
关于Android Sqlite 添加列后根据条件选择条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210958/