2017-05-08 82 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