2011-06-02 77 views
2

所以,当我试图标记删除的条目有'删除'值'1'而不是删除它时,发生这种情况。Android Sqlite添加列后根据条件选择条目

我在我的应用程序中使用ALTER TABLE "+TABLE_NAME+" ADD COLUMN "+NEW_COLUMN_NAME+" "+type+";");向数据库中添加了一列,并在数据库提供程序中做了其他适当的更改(插入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模拟器中运行。

谢谢。

回答

4

这一个:

SELECT * FROM TABLE_NAME WHERE NEW_COLUMN_NAME = null 

会返回一个空行中几乎任何DATEBASE设置,因为在SQL,表达NULL = x是所有x(甚至NULL的x)假。试试这个:

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(可能为默认值)创建它们以避免混淆和沮丧。

+0

谢谢。这样可行。 :) – Edison 2011-06-02 06:00:15