问题从数据库中删除行

时间:2013-09-09 00:51:05

标签: android android-sqlite

所以这看起来很简单,但我无法弄清楚我在这里做错了什么。我有我的数据库删除命令:

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

我可能做了一些愚蠢的事情,所以也许新鲜的眼睛会有所帮助。

3 个答案:

答案 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,这更安全了