2013-04-19 8 views
5
@SuppressWarnings("deprecation") 
public List<Picture> returnLimitedList(int offset, int end) { 
    List<Picture> pictureList = new ArrayList<Picture>(); 
    int startRow = offset; 
    int maxRows = end; 
    try { 
     QueryBuilder<Picture, Integer> queryBuilder = dao.queryBuilder(); 
     queryBuilder.offset(startRow).limit(maxRows); 
     pictureList = dao.query(queryBuilder.prepare()); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    return pictureList; 
} 
  • Ho una tabella di immagini nel database, e deve restituire un elenco limitato, 20 righe alla volta.
  • Ma quando uso ex: QueryBuilder.offset (11) .limit (30);
  • Non riesco a restituire l'elenco limitato a 20 righe.
  • L'elenco viene solo a me con il limite.
  • E 'come se l'offset rimane sempre con il valore 0
  • es: (0 - 30)Utilizzando limite() e offset() in QueryBuilder (ANDROID, ORMLITE)

  • C'è un altro modo per restituire un elenco limitato per l'indice iniziale e l'indice fine?

  • Qualcuno potrebbe aiutarmi?
+0

Puoi attivare la registrazione e post Android quali query vengono applicate? http://ormlite.com/docs/android-logging – Gray

+0

può essere perché quel limite (int maxRows) e offset (int startRow) sono deprecati. si consiglia di utilizzare il tipo lungo Quindi cercate: Lista pubblico returnLimitedList (Long offset, end lungo) { .... e poi: QueryBuilder.offset (11L) .limit (30L); –

risposta

12

Questa domanda è stata posta due mesi fa, ma risponderò se qualcuno si è imbattuto nello stesso problema di me.

C'è incomprensione di ciò che offset significa in questo caso, ecco qui di seguito quello che dice SQLite Documentazioni su di esso

Se un'espressione ha una clausola OFFSET, quindi le prime file M sono omessi dal set di risultati restituito dal L'istruzione SELECT e le successive N righe vengono restituite, dove M e N sono i valori che le clausole OFFSET e LIMIT valutano, rispettivamente.

Source

Sulla base della sua interrogazione, tornerete 30 righe a partire dalla linea # 11.

Quindi il modo corretto è:

queryBuilder.offset(startRow).limit(20); 

Con limit essendo il numero di righe che restituirà, non la riga finale.

pictureList = dao.query(queryBuilder.prepare()); 

E restituita List con il primo valore a partire dal pictureList.get(0)

Edit: aiuto @Gray s' su commenti

+1

+1. Si potrebbe anche voler sottolineare che il limite è il numero di righe, non la riga finale. Inoltre, le righe che vengono restituite sono sempre basate su 0. – Gray

+0

Grazie, ho risolto il mio problema. : D – fabiodresch

+0

Se non utilizza il limite, qual è il livello di prestazioni interessato? –

Problemi correlati