2017-05-08 7 views
0

kompilieren Ich versuche ORMLite Abfrage-Anweisung zu kompilieren, aber ich bin immer die folgende SQLException:Kann nicht ORMLite Aussage

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

Ich habe versucht, alle möglichen Wege, dies zu tun, aber ich bin immer bekommt es, mein primärer Versuch war:

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 

Und dann zunächst die Abfrage vorzubereiten habe ich versucht:

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

Und schließlich versuchte es separat in einem neuen Objekt zu bereiten dann das Objekt mit:

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 

Ich weiß nicht, was ich genau falsch zu machen, aber auch wenn ich versuchte, alle Möglichkeiten, die normalerweise mit mir zu arbeiten .

Antwort

1

Schließlich fand wo ist das Problem, in ORMLite wenn Ausführen einer Methode Sie wie die Ausführung eines Aussagen sind nicht nur Werte bekommen es woanders zu speichern, so dass, wenn diese Ausführung: jetzt

Long count = messagesQueryBuilder.countOf(); 

die messagesQueryBuilder enthält nur die abgerufene Zählung nicht das gesamte Abfrageergebnis, das zuvor darin gespeichert wurde.

Daher mein Problem zu lösen, wird nachbestellt ich die Codeausführung Zeilen wie die folgende sein:

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

, die genau richtig @Muhammed ist. Das 'countOf()' setzt einige Flags in der Abfrage in Bezug auf die Art der Ergebnisse. – Gray