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()。