2014-02-28 93 views
0

嗯,我試圖將數據庫中的值更新爲false;android更新數據庫錯誤

這是我的代碼

public void updatecheck(int id){ 
    mDb = mDbHelper.getWritableDatabase(); 

     ContentValues newValues = new ContentValues(); 
     newValues.put("check", true); 
     mDb.update(channel, newValues, "id"+" = ?", new String [] {String.valueOf(id)}); 

}

但我採取這一錯誤,

02-28 15:15:37.515:E/AndroidRuntime(5539): android.database.sqlite.SQLiteException:接近「檢查」:語法錯誤 (code 1):,while compiling:UPDATE Genelkultur2012 SET check =? WHERE id =?

解決:

新代碼

ContentValues newValues = new ContentValues(); 
     newValues.put("tamam", true); 
     mDb.update(channel, newValues, "id"+" = ?", new String [] {String.valueOf(id)}); 

回答

3

CHECK是SQL保留關鍵字。重新命名該列或用反引號引用它。

+0

「檢查」是這裏的罪魁禍首嗎?我認爲這是布爾數據類型。 – Saket

+1

是的,請參閱http://www.sqlite.org/syntaxdiagrams.html#column-constraint – laalto

+0

真棒!錯誤已移動 – mehmet

1

newValues.put("check", true);

你試圖存儲真正,布爾數據類型,它不被支持的SQLite。你會,而不是必須將它們存儲在以下類型之一:

  1. NULL。該值是一個NULL值。
  2. INTEGER。該值是一個有符號整數,根據值的大小存儲在1,2,3,4,6或8個字節中。
  3. REAL。該值是一個浮點值,以8字節的IEEE浮點數存儲。
  4. TEXT。該值是一個文本字符串,使用數據庫編碼(UTF-8,UTF-16BE或UTF-16LE)存儲。
  5. BLOB。該值是一組數據,完全按照輸入存儲。

我建議布爾成員存儲爲0或1。此處瞭解詳情:http://www.sqlite.org/datatype3.html

+0

看起來很正常。 「true」沒有問題 – mehmet

+0

其實你是對的,因爲布爾值有問題。我已經將布爾值更改爲0,1,但是作爲文本 – mehmet

+0

因此,布爾數據類型確實導致問題?哦,什麼類型? – Saket