Android Room 在运行时确定查询中的列名称
Android Room determine column name in query at runtime
这是我的Value
table结构
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
只是 enum
和 oneHour, 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 个方法中的哪一个。
这是我的Value
table结构
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
只是 enum
和 oneHour, 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 个方法中的哪一个。