我一直收到这个错误。我确定这是一个简单的语法错误。有人看到了吗?我调试了 ~30 分钟,但似乎找不到它。
查询
DELETE FROM SuccessfulCalls ORDER BY id DESC LIMIT 2
要插入数据库的实际代码。
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
最佳答案
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 实际运行。
关于android.database.sqlite.SQLiteException : near "ORDER": syntax error (code 1): ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936829/