Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android sqlite3 rawquery更新不起作用_Android_Sqlite - Fatal编程技术网

Android sqlite3 rawquery更新不起作用

Android sqlite3 rawquery更新不起作用,android,sqlite,Android,Sqlite,什么都试过了。此更新不起作用。没有错误或其他什么-它只是不更新表 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 sm

什么都试过了。此更新不起作用。没有错误或其他什么-它只是不更新表

   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>

试试这个:

 db.execSQL("UPDATE sms SET disabled="+s+" WHERE id="+ID+"");  
返回表(游标)的SQL查询将与rawQuery一起运行,而不返回表的SQL查询将与execSQL一起运行

见此:

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

试试这个:

 db.execSQL("UPDATE sms SET disabled="+s+" WHERE id="+ID+"");  
返回表(游标)的SQL查询将与rawQuery一起运行,而不返回表的SQL查询将与execSQL一起运行

见此:

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

更新:

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

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

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

注意:我不知道只在简历中添加您需要更改的内容是否足够,或者您必须添加所有属性。

更新:

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

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

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

注意:我不知道是否只在cv中放入需要更改的内容就足够了,还是必须放入所有属性。

使用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);   
}

使用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);   
}

@斯特米:我的错。我读到“必须终止”。我应该删除这个吗?也不行。得到警告:“找到了以结尾的SQL字符串;”iturki是的,也许更好:)@Dikobraz正如我所说的(正如文档所说的),您不必将分号放在query@Dikobraz:我不知道这是否正确,但如果我是你,我会尝试用单引号括住
s
。尝试过。也许任何人都可以将我的rawquery()重写为db.update()?@StErMi:my bad。我读到“必须终止”。我应该删除这个吗?也不行。得到警告:“找到了以结尾的SQL字符串;”iturki是的,也许更好:)@Dikobraz正如我所说的(正如文档所说的),您不必将分号放在query@Dikobraz:我不知道这是否正确,但如果我是你,我会尝试用单引号括住
s
。尝试过。也许任何人都可以将我的rawquery()重写为db.update()?如果查询中没有任何内容可替换,则可以使用新对象[]{}(空对象数组)作为绑定参数。不确定这是否能完全解决问题。有一种不同形式的execSQL,如果您需要,它可以接受args。这是正确的答案,它为我节省了更多的时间。我在更新时使用了rawQuery()。我也不想触发ContentObserver,因此也不能使用ContentProvider。我的表非常大,我想在调用notifyChange()之前先更新所有行,而ContentObserver在每次行更新时都会调用notifyChange(),这在我的情况下是一个非常糟糕的设计。糟糕的是,SQLite在这种情况下不会发出任何警告,更新只是被静默地抑制。您可以使用新对象[]{}(对象的空数组)作为绑定参数,如果查询中没有任何可替换的内容。不确定这是否能完全解决问题。如果需要,可以使用另一种形式的execSQL来获取参数。这是正确的答案,它为我节省了更多的时间。我使用的是rawQuery()在我的更新中。我也不想触发ContentObserver,因此也无法使用ContentProvider。我的表非常大,我想在调用notifyChange()之前先更新所有行,而ContentObserver调用notifyChange()在每一行更新上,这在我的情况下是一个非常糟糕的设计。糟糕的是,SQLite在这种情况下不会发出任何警告,而更新只是在静默中被抑制。是的,对SQLite数据库使用更新方法很容易,但如果您想更新整个记录。如果您只想更新单个或几个字段,最好方法是使用简单的execSQL方法。若您尝试用rawQuery更新单个字段,它不会更新,这就是为什么只使用execSQL()。是的,对SQLiteDataBase使用update方法很容易,但如果您想更新整个记录,则可以使用update方法。如果您只想更新单个或几个字段,最好的方法是使用简单的execSQL方法。如果您尝试使用rawQuery更新单个字段,则不会更新,这就是为什么只使用execSQL()。