我目前有一条用于我的 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/