android.database.sqlite.SQLiteException:near" ORDER&#34 ;:语法错误(代码1):,

时间:2014-05-29 15:22:14

标签: android sqlite

我一直收到这个错误。我确定这是一个简单的语法错误。有人看到了吗?我已经调试了大约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

2 个答案:

答案 0 :(得分:7)

{p} ORDER BYLIMIT在语法上不允许使用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