2012-01-08 73 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