代码之家  ›  专栏  ›  技术社区  ›  Jack Guo

android room在运行时确定查询中的列名

  •  0
  • Jack Guo  · 技术社区  · 8 年前

    这是我的 Value 表结构

    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 ,但这会抛出一个错误。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Udit    8 年前

    无法在运行时更改查询,因为room在生成时基于sql查询生成代码以获取结果。更改查询意味着更改方法实现。

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

    推荐文章