¿Qué hacer con Cursor después de una consulta SQLite?
Esta es la primera vez que uso una base de datos y no estoy muy seguro de cómo funciona esto. Hice la base de datos e hizo una consulta que devuelve un cursor y … ¿ahora qué? ¿Qué es un cursor, de verdad? ¿Puedo usarlo para navegar por mis datos o tengo que ponerlo en un ArrayList o ListActivity o qué?
- Actualizar la tabla sqlite en android
- Reemplazar la base de datos SQLite de aplicaciones mediante ADB
- Un comportamiento extraño para reguelr sqlite operación en android
- Cómo extraer el cursor y el valor entero de una matriz de clase Object
- ¿Cómo acceder a la base de datos sqlite existente en Android Emulator?
- Android - ¿Dónde está la base de datos SQLite almacenada
- SQLite Android: parámetro nullColumnHack en los métodos insert / replace
- ContentProvider llamadas atómicas? Guardar en onPause, cargar en OnActivityCreated, datos antiguos
- ¿Cómo agregar sub consulta en SQLITE Android junto con 'IN'?
- Utilizar el operador OR con 2 marcadores de posición con el mismo valor
- Se eliminó la base de datos de Sqlite cuando borro datos de la aplicación
- Estoy recibiendo una excepción de objeto de base de datos no cerrada en SQLite (Android), pero estoy cerrando explícitamente mi base de datos ... ¿Ayuda?
- Android: Bulk Insert, cuando InsertHelper está obsoleto
Necesita iterar el cursor para obtener los resultados.
Utilice cursor.moveToFirst()
y / o cursor.moveToNext()
(con un bucle while). A continuación, puede utilizar el método getX (), como cursor.getInt()
o cursor.getString()
.
Por ejemplo, si estás esperando un resultado de tu consulta:
if (cursor.moveToFirst()) { String name = cursor.getString(cursor.getColumnIndex('NAME')); int age = cursor.getInt(cursor.getColumnIndex('AGE')); } else { // oops nothing found! }
Llamar por primera vez a cursor.moveToFirst (). Cada vez que llame a cursor.moveToNext () se moverá a la siguiente fila. Asegúrese de que cuando haya terminado con el cursor que usted llama a cursor.deactivate () o obtendrá errores en su gato de registro.
Iterar sobre la instancia de Cursor devuelta
public List<Object[]> cursorToTableRows(Cursor cursor) { List<Object[]> result = new ArrayList<Object[]>(cursor.getCount()); cursor.move(0); cursor.moveToNext(); while (cursor.isAfterLast() == false) { Object[] tableRow = new Object[cursor.getColumnCount()]; for(int i=0; i<cursor.getColumnNames().length; i++) { int columnIndex = cursor.getColumnIndex(cursor.getColumnName(i)); String columnValue = cursor.getString(columnIndex); tableRow[i] = columnValue; } result.add(tableRow); cursor.moveToNext(); } cursor.close(); return result; }
A continuación, cree los objetos deseados.
public List<Vehicle> getVehicles() { List<Vehicle> vehicles = new ArrayList<Vehicle>(); Cursor cursor = null; List<Object[]> objects = cursorToTableRows(cursor); for(Object[] row : objects) { int i=0; Vehicle vehicle = new Vehicle(row[i++].toString(), row[i++].toString())); vehicles.add(vehicle) } return vehicles; }
from Developer.android : Esta interfaz proporciona acceso de lectura y escritura aleatorio al conjunto de resultados devuelto por una consulta de base de datos.
En otras palabras: consulta devuelve un conjunto de datos representados por un cursor. Primero debe asegurarse de que tiene un cursor válido (no nulo) y luego intentar moverlo a la posición deseada en el conjunto de datos (use los métodos moveToXXX). Para obtener datos apuntados por el cursor, use métodos getXXX. Cuando haya terminado de usarlo asegúrese de llamar cerca de los recursos de liberación.
De acuerdo con este enlace , parece que se puede iterar a través de la consulta de retorno utilizando algo así como:
cursor.next();
Y tome los datos en la ubicación que está buscando utilizando:
cursor.getString(0)
Una vez que haya configurado Cursor correctamente, normalmente desea mostrarlo en una vista de alguna forma.
Echa un vistazo a la siguiente respuesta para obtener un ejemplo detallado, pero simple de usar un adaptador de cursor para emparejar tu Cursor recién acuñado con la vista XML deseada:
- Descomprimir archivo zip da "java.util.zip.ZipException: No se puede leer la versión" o "java.util.ZipException No se puede leer la versión de encabezado local 45"
- Android Date.toLocaleString () – sin elementos de tiempo?