我一直收到这个错误。我确定这是一个简单的语法错误。有人看到了吗?我已经调试了大约30分钟,似乎无法找到它。
查询
DELETE FROM SuccessfulCalls ORDER BY id DESC LIMIT 2
要插入db的实际代码。
SQLiteHelper sqLiteHelper = ApplicationClass.getSqLiteHelper();
SQLiteDatabase db = sqLiteHelper.getWritableDatabase();
String query = "DELETE FROM " + sqLiteHelper.SUCCESSFULCALLSTABLE + " ORDER BY " + sqLiteHelper.SUCCESSFULID + " DESC LIMIT " + Constants.NUMBEROFCALLSTODELETE ;
db.rawQuery(query, null);
db.close();
更新 我尝试过这个查询,但由于某种原因它不会删除我的数据库中的行。
DELETE FROM SuccessfulCalls WHERE id IN ( SELECT id FROM SuccessfulCalls ORDER BY id DESC LIMIT 5 );
但我知道查询正在执行,因为当我尝试时。它删除了我的整个表格。 从SuccessfulCalls删除
更新 我正在设置我的主键错误。对于sql lite来自动增加一个主键,他们需要INTEGER PRIMARY KEY而不是int PRIMARY KEY
答案 0 :(得分:7)
ORDER BY
和LIMIT
在语法上不允许使用DELETE
查询,除非sqlite is built with SQLITE_ENABLE_UPDATE_DELETE_LIMIT
在Android上不是这种情况。
如果要删除两个最高id
行,请使用
DELETE FROM SuccessfullCalls WHERE id IN (SELECT id FROM SuccessfulCalls ORDER BY id DESC LIMIT 2);
使用execSQL()
进行此类查询而不是rawQuery()
以使SQL实际运行。
答案 1 :(得分:2)
您不能在DELETE语句中使用ORDER BY。见http://www.sqlite.org/lang_delete.html