2012-01-08 78 views
1

嘗試了一切。此更新不起作用。沒有錯誤或什麼 - 它只是不更新​​表。sqlite3 rawquery更新不起作用

void SetDisable (Integer ID, boolean action){ 
     Integer s; 
     if (action==true) s = 0; else s = 1; 
     db.rawQuery("UPDATE sms SET disabled="+s+" WHERE id="+ID+"",null); 
    } 

這是我的表模式:

CREATE TABLE sms (id INTEGER PRIMARY KEY, fromhour INT, frommin INT, tohour INT, tomin INT, disabled INT); 
sqlite> 

回答

5

很容易使用SQLiteDatabase類提供的更新方法。

void SetDisable (Integer ID, boolean action){ 
    Integer s; 
    if (action==true) s = 0; else s = 1; 

    ContentValues cv=new ContentValues(); 
    cv.put(disabled, s); 

    String where = "id=?"; 
    String[] whereArgs = {Integer.toString(ID)}; 

    db.update(sms, cv, where , whereArgs); 
} 
+0

是的,它很容易使用SQLiteDataBase的更新方法,但如果你想更新整個記錄。如果你只想更新一個或幾個字段,最好的方法是使用簡單的execSQL方法。如果您嘗試使用rawQuery更新單個字段,它不會更新,這就是爲什麼只使用execSQL()。 – Sniper 2015-12-05 18:01:08

11

試試這個:它會返回一個表(光標)是與rawQuery運行

db.execSQL("UPDATE sms SET disabled="+s+" WHERE id="+ID+""); 

SQL查詢,那些不返回表的應用程序將使用execSQL運行

看到這個:

Increase the value of a record in android/sqlite database

+0

遇到錯誤「空綁定ARGS」 – Dikobraz 2012-01-08 10:57:53

+0

您可以使用新的對象[] {}(對象的空數組)作爲綁定ARGS,如果你沒有什麼在查詢替換。不知道這是否能夠完全解決問題。如果你需要的話,有一種不同形式的execSQL需要引用args。 – parkerfath 2012-07-31 21:19:45

+0

最佳解決方案,謝謝! – catalin87 2013-02-17 01:07:53

-1

更新時間:

試試這個

ContentValues cv = new ContentValues(); 
cv.put("disabled", s); 

db.update("table_name", cv, "id="+ID, null); 

注:我不知道這是否是足以讓你唯一需要改變什麼在簡歷或你必須把所有的屬性。

+0

@StErMi:我的不好。我讀它「必須;終止」。我應該刪除它嗎? – iTurki 2012-01-08 11:15:06

+0

也沒有工作。得到了警告:「找到結尾的SQL字符串;」 – Dikobraz 2012-01-08 11:15:17

+0

iturki yes也許它更好:) @Dikobraz正如我所說(和文檔說的一樣),你不必把分號放在查詢末尾 – StErMi 2012-01-08 11:16:49