所以这看起来很简单,但我无法弄清楚我在这里做错了什么。我有我的数据库删除命令:
public boolean deleteContact(String rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
我还应该提一下,我在listview中显示数据库。因此,当用户点击某个项目时,他们会看到“确定”和“删除”选项。
当他们点击删除时,这是我正在使用的命令:
db.open();
db.deleteContact("Apple Recipe");
db.close();
dialog.dismiss();
我一直在接受强制关闭问题:
android.database.sqlite.SQLiteException: ner "Recipe":syntax error
(code 1): , while compiling: DELETE FROM list WHERE item=Apple Recipe
我可能做了一些愚蠢的事情,所以也许新鲜的眼睛会有所帮助。
答案 0 :(得分:2)
在删除语句中添加'
,如下所示:
return db.delete(DATABASE_TABLE, KEY_ROWID + "='" + rowId + "'", null) > 0;
或者,如其他海报所述,您可以使用单独的参数:
String whereString = KEY_ROWID + "= ?";
String[] whereArgs = new String[] { rowId };
db.delete(DATABASE_TABLE, whereString, whereArgs);
答案 1 :(得分:1)
contentResolver的删除方法,Uri,“where”字符串和args字符串。 和行id很可能是一个int
所以它应该是这样的 db.delete(DATABASE_TABLE,“rowId =?”,row_id_number);
或者如果您希望匹配某些字段,例如“recipe”,这是一个字符串。 假设字段名称是配方: db.delete(DATABASE_TABLE,“recipe =?”,“Apple Recipe”);
答案 2 :(得分:1)
说实话,你应该使用:
return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[]{rowId}) > 0;
与转义值有关,确保在可执行的字符串中没有SQL,这更安全了