android - 在编译期间,如何修复 android studio 中 Room 中复杂 sql 语句验证的错误?

标签 android sqlite compiler-errors android-room

我目前有一条用于我的 DAO 查询语句的 sql 语句:

    @Query(
            "select " +
            "    avg(q1.weight) over (rows between 3 PRECEDING AND CURRENT ROW) as adjusted_weight " +
            "from weight_record AS q1 " +
            "order by q1.date"
    )
    LiveData<List<AggregatedWeightRecord>> getAggregatedRecords();

当我直接在 sqlite3 中尝试这个查询时,它工作得很好。当我将它放入 Android Studio 并尝试编译时,我得到了这个错误:

error: extraneous input '(' expecting {<EOF>, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}

extraneous input ')' expecting {<EOF>, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}

我已尝试更改查询,但我现在需要使用 Windows。我还在@Query 之前添加了@SkipQueryVerification,但我仍然收到错误。

我有什么选择可以编译它并同时具有 LiveData 的能力?

最佳答案

简而言之,您将不得不使用不使用窗口函数的替代查询。

支持窗口函数,因此在 SQLite 3.25.0 中引入了 OVER 的使用。 .

Android 官方列表中支持的最高 SQLite 版本是 SQLite 3.19。因此 OVER 是无效语法,您不能使用 Window 函数。 android.database.sqlite

关于android - 在编译期间,如何修复 android studio 中 Room 中复杂 sql 语句验证的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258762/

相关文章:

SQLite 添加计算列

mysql - 为什么使用 union,2 个查询的结果在 SQLite 中混合?

java - 我的Java程序正在创建27个无效错误

ios - xcode 没有为我预填充

java - android:以符号键盘模式启动,但不限于纯数字输入

python - Sqlalchemy 在时隙中获取行

java - 将 json 对象添加到 Java HttpGet 请求到 C# WebApi

grails - STS IDE下划线域字段

android - Unity3D Android构建报告完整尺寸太大

android - 相对布局的评估顺序、最佳实践和相对布局的解析