2016-04-25 36 views
-1

我試圖刪除SQLite表數據刪除數據,其中源列等於「在線」致命 - 的RuntimeException的SQLite從數據庫

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.reminders/com.reminders.FetchDataActivity}: android.database.sqlite.SQLiteException: no such column: Online (code 1): , while compiling: delete from ReminderTable where source = Online 

這裏是我的代碼:

public void deleteOnlineReminders() { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     db.execSQL("delete from "+ TABLE_REMINDERS + " where " + KEY_SOURCE + " = " + "Online"); 
    } 

Or是它由於原因,我沒有任何數據到列表源列=在線

+0

在此之前,只檢查是否創建表與否,異常似乎沒有列名爲KEY_SOURCE –

回答

1

試試這個代碼。

db.execSQL("delete from "+ TABLE_REMINDERS + " where " + KEY_SOURCE + "=?",new String[] { "Online" }); 
+0

得到:無法解析符號'在線' – Sun

+0

現在得到:java.lang.RuntimeException:無法啓動活動ComponentInfo {com.reminders/com.reminders.FetchDataActivity}:android.database.sqlite.SQLiteException:near「=」:語法錯誤(代碼1):,編譯時:delete ReminderTable其中source = – Sun

+1

@Sun我剛剛編輯過只添加了'Question Mark After Equal to'試試看。 –

1

你必須使用'在線'在你的字符串concat(注意引號)。

正如您從異常中可以看到的那樣,編譯語句在其他情況下是錯誤的,因爲您引用的是列而不是字符串。

你也可以使用準備好的語句,而不是字符串連接爲您的參數: How do I use prepared statements in SQlite in Android?

這是更清潔和安全的版本:)

+0

我想這樣太:db.execSQL(「從刪除‘+ TABLE_REMINDERS +’,其中」 + KEY_SOURCE +「= Online」);但仍然得到同樣的異常 – Sun

+1

db.execSQL(「刪除」+ TABLE_REMINDERS +「其中」+ KEY_SOURCE +「='在線'」 請注意在線附近的單引號 –

0
public void deleteOnlineReminders() { 
    SQLiteDatabase db = this.getWritableDatabase();  
    dbHelper.delete(TABLE_REMINDERS, KEY_SOURCE + "=?", new String[] { Online}) 
}