Android Room 在运行时确定查询中的列名称

Android Room determine column name in query at runtime

这是我的Valuetable结构

varName   value    timestamp    oneHour    oneDay    oneWeek
============================================================
varA      12.7     129387230    true       false     false
varB      32.0     129387230    true       true      false
varA      32.2     129387234    true       true      true
...

如您所见,每个条目都有一个或多个标志,用于确定该条目是否用于具有相应时间刻度的图表中。

在我的 Dao 中,我有一个查询来获取变量时间刻度的所有值。 Timescale 只是 enumoneHour, oneDay, oneWeek

@Query("SELECT * FROM Value WHERE varName = :varName AND [       ] ORDER BY timestamp ASC")
fun getByTimescale(varName: String, timescale: Timescale): Flowable<List<Value>>

在括号中,我想做类似timescale.name = true的事情,但那会引发错误。

无法在运行时更改查询,因为 Room 在构建期间会根据 SQL 查询生成代码以获取结果。更改查询意味着更改方法实现。

您可以通过创建 3 个查询来实现这一点,每个查询对应一个枚举值。 然后在运行时,决定您需要调用 3 个方法中的哪一个。