2012-10-29 60 views
2

我目前有一個userIds列表,我試圖創建一個查詢來從我的數據庫中獲取所有這些。GreenDAO QueryBuilder動態添加條件

這是我的想法,我只是沒有那麼肯定,它可能:

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中創建動態查詢的正確方法。

編輯:

我嘗試這樣做的結果是在聲明中對QueryBuilder

回答

3

行了NullPointerException嘗試使用IN查詢,而不是,它的運行速度更快+,你可以緩存您的查詢對象。 所以讓我們說,你有

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(); 
+1

設置列表或數組到已經準備好的查詢所有通過setParameter(0,用戶id )在我的情況下不起作用。在GreenDao源代碼中,他們只會調用userIds.toString()來應用參數。 – Christopher