2011-08-21 8 views
18

Después de crear un cursor SQLite estándar, estoy iteración a través de las entradas usando:sqlite: parece que funciona sin MoveToNext moveToFirst necesario

while (cursor.moveToNext()) { 
} 

Todas las filas se procesan correctamente. Toda la documentación que he leído indica que debe emitir un moveToFirst() para asegurar que está señalando a la primera entrada del conjunto de cursor.

¿Está funcionando esto aunque no debería, y otra versión puede no tener el mismo procesamiento?

Respuesta

42

No, esto funciona correctamente. Cursor s comienzan en el índice de fila -1 (antes de la primera fila). Si el Cursor hace referencia a varias filas, recorrerlas con el bucle while como ha sugerido es el método preferido. Llamará al moveToNext(), que lo mueve al índice 0 (la primera fila), y va desde allí.

Si su Cursor solo hace referencia a una fila, puede llamar al moveToFirst() antes de leer los datos para asegurarse de que se encuentra en un índice válido. Tanto moveToFirst() como moveToNext() tienen el mismo efecto cuando se crea por primera vez el Cursor y está en el índice -1.

+0

Gracias! Eso explica por qué ha estado trabajando de manera consistente. Es extraño que ninguno de los ejemplos que he visto especifique que esta es una forma de iterar a través de un cursor. – charlest

+4

+1, análisis muy impresionante. Esto también está [documentado aquí] (http://developer.android.com/reference/android/database/Cursor.html#getPosition()). – orip

+0

"que lo mueve al índice 0 (la primera fila)" Correctamente se mueve al índice 1 desde el índice -1 omitiendo 0. – vitalii

Cuestiones relacionadas