2017-05-08 57 views
0

我想要編譯ORMLite查詢語句,但我發現了以下SQLException不能編譯ORMLite聲明

Could not compile this SELECT_LONG statement since the caller is expecting a SELECT statement. Check your QueryBuilder methods. 

我已經嘗試了所有可能的方式這樣做,但我總是得到它,我的主要嘗試是:

QueryBuilder<Message, Integer> messagesQueryBuilder = dbManager.getMessagesDao().queryBuilder(); 
Where<Message, Integer> resultedQuery = messagesQueryBuilder.where().in(Message.SCHOOL_COLUMN_NAME, schoolIntegerQueryBuilder); 
Long count = messagesQueryBuilder.countOf(); 
messagesQueryBuilder.orderBy(Message.MESSAGE_TIMESTAMP, false); 
messagesQueryBuilder.queryForFirst(); // getting it here 

然後我嘗試準備查詢第一:

messagesQueryBuilder.orderBy(Message.MESSAGE_TIMESTAMP, false); 
Message message = dbManager.getMessagesDao().query(messagesQueryBuilder.prepare()).get(0); // getting here also 

最後試圖在一個新的對象,然後使用該對象單獨準備的:

PreparedQuery<Message> queryForMessage = messagesQueryBuilder.orderBy(Message.MESSAGE_TIMESTAMP, false).prepare(); 
Message message = dbManager.getMessagesDao().query(queryForMessage).get(0); // also failing here with the same Exception 

我不知道我究竟做錯了,但即使我嘗試了所有通常和我一起工作的可能途徑。

回答

1

終於找到地方在執行這個時候執行你像執行的語句不僅獲取值存儲在別處,所以方法時有問題,在ORMLite:

Long count = messagesQueryBuilder.countOf(); 

現在messagesQueryBuilder只包含檢索到的計數不是之前存儲在其中的整個查詢結果。

因此,要解決我的問題,我重新排序的代碼執行行是如下所示:

QueryBuilder<Message, Integer> messagesQueryBuilder = dbManager.getMessagesDao().queryBuilder(); 
Where<Message, Integer> resultedQuery = messagesQueryBuilder.where().in(Message.SCHOOL_COLUMN_NAME, schoolIntegerQueryBuilder); 

messagesQueryBuilder.orderBy(Message.MESSAGE_TIMESTAMP, false); 
Message message = messagesQueryBuilder.queryForFirst(); 

Long count = messagesQueryBuilder.countOf(); 
+1

這是完全正確@Muhammed。 'countOf()'根據結果類型在查詢上設置一些標誌。 – Gray