我在删除表中的行时遇到问题。它应该很简单,但我无法弄清楚它为什么不起作用。这是我创建的表格:
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) });
两者都不起作用。有什么想法吗?
答案 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个参数-.-