islast - movetonext sqlite android
¿Qué es el uso de moveToFirst() en los cursores de SQLite? (5)
Soy un novato en programación y encontré este código en internet y funciona bien.
Cursor c=db.query(DataBase.TB_NAME, new String[] {DataBase.KEY_ROWID,DataBase.KEY_RATE}, DataBase.KEY_ROWID+"= 1", null, null, null, null);
if(c!=null)
{
c.moveToFirst();
}
pero no soy capaz de entender el uso de la
if(c!=null)
{
c.moveToFirst();
}
parte. ¿Qué hace exactamente, y si quito el
if(c!=null) { c.moveToFirst(); }
parte, el código no funciona.
El cursor no es una fila del resultado de la consulta. El cursor es un objeto que puede iterar en las filas de resultados de su consulta. El cursor puede moverse a cada fila. .moveToFirst()
método .moveToFirst()
mueve a la primera fila de la tabla de resultados.
El método moveToFirst () mueve el cursor a la primera fila. Permite realizar una prueba si la consulta devolvió un conjunto vacío o no. Aquí hay una muestra de su implementación,
if (cursor.getCount() == 0 || !cursor.moveToFirst()) {
return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN));
cursor.close();
Lo que dice macio.Jun es correcto!
Tenemos código como el siguiente:
String sql = "select id,title,url,singer,view,info from cache where id=" + id;
SQLiteDatabase db = getMaintainer().getReadableDatabase();
Cursor query = db.rawQuery(sql, null);
query.moveToFirst();
while(query.moveToNext()){
DBMusicData entity = new DBMusicData();
entity.setId(query.getString(query.getColumnIndex(FIELD_ID)));
entity.setTitle(query.getString(query.getColumnIndex(FIELD_TITLE)));
entity.setSinger(query.getString(query.getColumnIndex(FIELD_SINGER)));
entity.setTitlepic(query.getString(query.getColumnIndex(FIELD_PICURL)));
entity.setInfoUrl(query.getString(query.getColumnIndex(FIELD_INFO)));
entity.setViews(query.getString(query.getColumnIndex(FIELD_VIEW)));
Log.w(tag, "cache:"+ entity.toString());
}
query.close();
query=null;
db.close();
db=null;
Si solo tenemos un registro en la tabla de caché, query.moveToFirst (); Hará que ningún registro vuelva.
Los documentos para SQLiteDatabase.query() dicen que los métodos de consulta devuelven:
"Un objeto Cursor, que se coloca antes de la primera entrada".
Llamar a moveToFirst()
hace dos cosas: le permite probar si la consulta devolvió un conjunto vacío (probando el valor de retorno) y mueve el cursor al primer resultado (cuando el conjunto no está vacío). Tenga en cuenta que para protegerse contra un conjunto de devoluciones vacío, el código que publicó debe estar probando el valor de retorno (que no está haciendo).
A diferencia de la llamada a moveToFirst()
, la prueba de if(c!=null)
es inútil; query()
devolverá un objeto Cursor
o lanzará una excepción. Nunca volverá null
.
if (c.moveToFirst()) {
while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
...
c.moveToNext();
}
}