android.database.sqlite.SQLiteException : near "ORDER": syntax error (code 1): ,

标签 android sqlite

我一直收到这个错误。我确定这是一个简单的语法错误。有人看到了吗?我调试了 ~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 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 实际运行。

关于android.database.sqlite.SQLiteException : near "ORDER": syntax error (code 1): ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936829/

相关文章:

java - 使用字符串缓冲区从 ArrayList 中获取单行或双行字符串

javascript - 如何在 React Native 中聚焦裁剪图像

android - Retrofit 2 不适用于 Android API 级别 17

sqlite - 如何创建一个可观察的游标

sqlite - 使用AIR应用安装默认数据库

java - 如何在卡片 View 的侧面设置颜色

java - 设置计时器来测量应用程序运行的时间

php - PDO+SQLite 不在一个查询中运行多个语句?

java - 从 SQLite 检索数据并在另一个类中按行显示

python - 优化存储在 SQLite 中的数据 - 如何加入多个联系人?