如何有效地查询具有两个WHERE子句的表(Android Room)

时间:2017-10-30 03:44:51

标签: android android-room

假设我有一个对象

class Person {
    String firstName;
    String lastName;
    ... other fields...
}

和包含

的数据库
@Entity
class DatabaseTable {
    String firstName;
    String lastName;
    ... other unrelated fields from person...
}

现在在我的Dao,我有

@Query("SELECT * FROM DatabaseTable WHERE " +
        " firstName = :firstName AND lastName = :lastName")
List<DatabaseTable> getAll(String firstName, String lastName);

我有要查询DatabaseTable的列表。

Person("Apple", "Kohn", ...)
Person("Benny", "Lorie", ...)
Person("Cindy", "May", ...)
... 

我如何有效地提取数据库表?对我名单中的每个人打电话都是不对的。

编辑:

我想知道如何使用单个查询来检索结果列表。

我知道引擎盖下房间使用ContentValue来循环实体列表。 有没有办法让我们创建自己的contentValue来传递到Room?

以下是可能的吗?

getAllWithPairs( List<String> firstNames, List<String> lastNames);

2 个答案:

答案 0 :(得分:0)

WHERE 语句的第一部分之后添加 AND ,您可以附加其他 WHERE 逻辑。

样本

@Query("SELECT * FROM content WHERE timestamp >= :timeframe AND feedType = :feedType ORDER BY qualityScore DESC")
fun getMainContent(timeframe: Date, feedType: FeedType): DataSource.Factory<Int, Content>

答案 1 :(得分:0)

如果我正确理解了您的问题,那么您正在致电

List<DatabaseTable> getAll(String firstName, String lastName);

一次存储数据库中的每个人。我认为您正在寻找的是:

@Query("SELECT * FROM DatabaseTable")
List<DatabaseTable> getAll();

这应该为您提供每个人的表-DatabaseTable

对于问题的编辑部分,请尝试以下操作:

@Query("SELECT * FROM DatabaseTable WHERE 
    firstName IN (:firstNames) AND secondName IN (:lastNames)")
getAllWithPairs(List<String> firstNames, List<String> lastNames);