2013-03-20 19 views
6

Sono interessante sui dettagli di implementazione dello Cursor in Android. So che fondamentalmente è solo un interface che fornisce accesso in lettura-scrittura casuale al set di risultati restituito da una query di database. Mi chiedo delle particolari implementazioni Cursor:Come viene implementato il cursore del database Android nei dettagli?

  1. Si tratta di una sorta di struttura dati che memorizza il set di risultati dal database?
  2. Oppure è solo una struttura che gestisce solo una riga?

risposta

6

E 'è solo qualche struttura dati che memorizza insieme di risultati di database di

Sì.

Oppure è una struttura che gestisce solo una riga?

Non esattamente. Il cursore può gestire una o più righe in base alla query di origine. Il cursore è la mappa dei dati e conterrà tutte le righe dei ritorni delle query di origine (selezione). Quindi se la query restituisce centinaia di righe, queste righe vengono inserite in Cursore e il cursore contiene queste cento righe.

È possibile immaginare il cursore come una mappa di dati con dimensione dinamica (simile a Elenco) in cui i dati vengono posizionati come "righe". Ogni riga ha il proprio ID di riga (numero di riga, possiamo dire un puntatore) che viene generato gradualmente mentre vengono inseriti nel cursore e puoi semplicemente spostarti tra le righe con questo numero. Implicitamente ogni cursore ha "puntatore effettivo" posizionato prima della prima riga (posizione -1), quindi se si chiama l'attesa c.getString(0) verrà generato perché non c'è nulla da recuperare.

Quindi è sempre necessario chiamare cursor.moveToFirst() che prepara il cursore per la lettura e se è vuoto, il metodo restituisce falso perché non c'è alcuna riga.

Problemi correlati