0

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

public boolean deleteContact(String rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

我还应该提到我在列表视图中显示数据库。所以当用户点击一个项目时,他们会看到一个“确定”和一个“删除”选项。

当他们点击删除时,这是我正在使用的命令:

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

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

4

3 回答 3

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);
于 2013-09-09T00:58:49.480 回答
1

contentResolver 的 delete 方法需要一个 Uri、一个“where”字符串和一个 args 字符串。并且行 id 很可能是一个 int

所以它应该是这样的 db.delete(DATABASE_TABLE,"rowId = ? ", row_id_number);

或者,如果您要匹配某个字段,例如“recipe”,它是一个字符串。假设字段名称是配方: db.delete(DATABASE_TABLE, "recipe = ?", "Apple Recipe");

于 2013-09-09T01:17:32.643 回答
1

老实说,您应该使用:

return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[]{rowId}) > 0;

转义值以确保字符串中没有可以执行的 SQL 更安全

于 2013-09-09T01:19:01.540 回答