Android Sqlite 添加列后根据条件选择条目

标签 android sql sqlite null alter-table

因此,当我尝试将已删除条目标记为“已删除”值“1”而不是删除它时,就会发生这种情况。

我使用 ALTER TABLE "+TABLE_NAME+"ADD COLUMN "+NEW_COLUMN_NAME+""+type+";"); 向应用中的数据库添加了一列,并在数据库提供程序中进行了其他适当的更改(当插入insert 0时),然而,奇怪的事情发生了。

添加后,会发生以下情况:

  1. SELECT * FROM TABLE_NAME - 返回所有行(按预期)
  2. SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME=1 返回 NEW_COLUMN_NAME=1 的行(如预期)。 然而,
  3. SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME=0 返回新插入的行(如预期)。
  4. SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME!=1 仅返回新插入的行(不返回旧行)
  5. 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/

相关文章:

sql - 在SQL中,如何使用LIKE匹配最多(但不超过)个通配符?

sql - 嵌套,分组Sqlite语法?

android - 显示国家及其调用代码,但使用 Android XML 返回其缩写代码

android - arm-eabi-gcc : No such file or directory in cyanogenmod source

sql - 在 mysql 数据库中选择 1 或 0 时出现问题

php - MySQL 和 PHP : querying 3 rows at a time

android - 在边界中拖动图像

android - 如何使用唤醒锁将安卓设备从深度 sleep 中唤醒?

sql - 如何在没有周六和周日的情况下获得 db2 中的工作日差异?

ios - If 语句在 iOS 中使用 sqlite 语句给出错误