2013-03-20 17 views
6

Jestem ciekawy szczegółów implementacji Cursor w systemie Android. Wiem, że w zasadzie jest to tylko interface, który zapewnia losowy dostęp do odczytu i zapisu do zestawu wyników zwróconego przez zapytanie bazy danych. Zastanawiam się nad konkretnymi implementacjami Cursor:W jaki sposób zaimplementowano kursor bazy danych Android w szczegółach?

  1. Czy jest to pewnego rodzaju struktura danych, która przechowuje zestaw wyników z bazy danych?
  2. Czy to tylko struktura, która obsługuje tylko jeden wiersz?

Odpowiedz

6

Czy to tylko niektóre struktury danych, która przechowuje zestaw wyników z bazy

Tak.

A może jest to struktura, która obsługuje tylko jeden rząd?

Niezupełnie. Kursor może obsługiwać jeden lub więcej wierszy na podstawie zapytania źródłowego. Kursor jest mapą danych i zawiera tyle wierszy, ile zwraca zapytanie źródłowe (wybierz). Więc jeśli zapytanie zwraca sto wierszy, te wiersze są wstawiane do Kursora, a Kursor zawierają te sto wierszy.

Można sobie wyobrazić kursor jako mapę danych o rozmiarze dynamicznym (podobnie jak lista), gdzie dane są umieszczane jako "wiersze". Każdy wiersz ma własny identyfikator wiersza (numer wiersza, możemy powiedzieć jakiś wskaźnik), który jest generowany stopniowo, gdy są wstawiane do kursora i możesz po prostu poruszać się między wierszami o tej liczbie. Implicitly każdy kursor ma "faktyczny wskaźnik" umieszczony przed pierwszym rzędem (pozycja -1), więc jeśli zadzwonisz c.getString(0) oczekiwanie zostanie wyrzucone, ponieważ nie ma niczego do odzyskania.

Zawsze należy zadzwonić pod numer cursor.moveToFirst(), który przygotuje kursor do odczytu, a jeśli jest pusty, to metoda zwraca wartość false, ponieważ nie ma wiersza.

Powiązane problemy