2011-06-02 123 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