删除行的SQLite查询不起作用

时间:2014-07-23 21:47:17

标签: android sqlite

我在删除表中的行时遇到问题。它应该很简单,但我无法弄清楚它为什么不起作用。这是我创建的表格:

database.execSQL(
    "CREATE TABLE " +PERSONAL_LIST_EXERCISES_TABLE +" (" +
    PERSONAL_LIST_ID +" INT, " +
    EXERCISE_ID +" INT);");

我尝试使用此查询删除一行:

    db.rawQuery(
            "DELETE FROM " +PERSONAL_LIST_EXERCISES_TABLE +
            " WHERE " +EXERCISE_ID +" LIKE '" +String.valueOf(exerciseId) +"'" +
            " AND " +PERSONAL_LIST_ID +" LIKE '" +String.valueOf(listId) +"'", null);

我也尝试使用删除方法:

db.delete(
    PERSONAL_LIST_EXERCISES_TABLE, EXERCISE_ID +" =? AND " +PERSONAL_LIST_ID +" =? ",
    new String[] {String.valueOf(exerciseId), String.valueOf(listId) });

两者都不起作用。有什么想法吗?

4 个答案:

答案 0 :(得分:0)

我看不出错误,试试这个:

db.rawQuery("DELETE FROM " + PERSONAL_LIST_EXERCISES_TABLE +
" WHERE " + EXERCISE_ID + " LIKE " + String.valueOf(exerciseId) +
        " AND " + PERSONAL_LIST_ID + " LIKE " + String.valueOf(listId) , null);

或者

db.delete(
PERSONAL_LIST_EXERCISES_TABLE, EXERCISE_ID +" = ? AND " +PERSONAL_LIST_ID +" = ? ",
new String[] {String.valueOf(exerciseId), String.valueOf(listId) });

我做的唯一更改是放空格并退出(')

并尝试在LIKE句子上加上“%”字符

答案 1 :(得分:0)

我看到两个潜在问题。

1)使用LIKE函数时,通常会使用通配符(%)。否则你也可以使用=

假设你的意思是EXERCISE_ID应该在里面的某个地方有String.valueOf(exerciseId),我会像这样重写那部分查询:

LIKE '%" +String.valueOf(exerciseId) +"%'"

2)以这种方式编写SQL代码有点奇怪,因为你一方面有你发送到SQLLite数据库的字符串,那个字符串将包含代表字段的变量。另一方面,您有一个字符串,您可以将该字符串分配给该函数,其中的变量代表Android应用程序中的字段。

你在这里看到的是在Android中引用多个字段但在SQL中没有引用。您还没有给出详细信息,但假设EXERCISE_ID是数据库中的一个字段,WHERE子句的第一行可能如下所示:

" WHERE EXERCISE_ID LIKE '" +String.valueOf(exerciseId) +"'" +

你看我如何将EXERCISE_ID放回字符串中,以便按原样发送到SQLLite?

如果这两个假设是正确的,我会像这样重写你的完整陈述:

db.rawQuery(
        "DELETE FROM " +PERSONAL_LIST_EXERCISES_TABLE +
        " WHERE EXERCISE_ID LIKE '%" +String.valueOf(exerciseId) +"%'" +
        " AND PERSONAL_LIST_ID LIKE '%" +String.valueOf(listId) +"%'", null);

答案 2 :(得分:0)

也许你需要改成下一个声明

db.delete(String table, String whereClause, String[] whereArgs)

其中:

db is your database
table is your table
whereClause is your where sentence
whereArgs are the arguments for your sentence

答案 3 :(得分:0)

它终于正常工作......我的问题中写的删除代码完全正常(db.delete(...))。 rawQuery仍然不起作用。我没弄清楚它有什么问题。

我是如何解决的? ...通过以正确的顺序传递2个参数-.-