GreenDAO QueryBuilder动态添加条件

时间:2012-10-29 13:47:52

标签: android sqlite greendao

我目前有一个userIds列表,我正在尝试创建一个查询来从我的数据库中获取所有这些。

这就是我想到的,我只是不确定它是否可能:

ArrayList<Users> listOfUsers = getCurrentUsers(); 
// lets assume that by now I have a list of users
QueryBuilder<Users> qb = getUsersDao().queryBuilder();
for(Users usr : listOfUsers) {
    qb.where(Properties.userId.eq(usr.getUserId());
}
List result = qb.list();

我没有看到任何关于这样做的正确方法的文档,我想知道这是否是在GreenDAO中创建动态查询的正确方法。

编辑:

我试过这个,结果是NullPointerException

声明中的QueryBuilder

1 个答案:

答案 0 :(得分:3)

尝试使用IN查询,它会运行得更快+你可以缓存你的Query对象。 所以我们说你有

List<String> userIds;

您可以通过以下方式获取列表:

qb.where(Properties.UserId.in(userIds))

如果这是您经常进行的操作,最好缓存查询。为此,请按如下方式准备查询一次:

Query<User> query = qb.where(Properties.UserId.in("?")).build();

然后当你需要运行它时:

query.setParameter(0, userIds);
return query.list();