web-dev-qa-db-fra.com

Quelle est l'utilisation de moveToFirst () dans les curseurs SQLite

Je suis un débutant en programmation .__ et j'ai trouvé ce morceau de code sur Internet et cela fonctionne 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();
        }

mais je ne suis pas en mesure de comprendre l'utilisation de la

if(c!=null)
    {
        c.moveToFirst();
    }

partie. Que fait-il exactement, et si je supprime le

if(c!=null) { c.moveToFirst(); }

partie, le code ne fonctionne pas.

19
Aswin

La documentation de SQLiteDatabase.query () indique que les méthodes de requête renvoient:

"Un objet Cursor, qui est positionné avant la première entrée."

L'appel de moveToFirst() fait deux choses: cela vous permet de vérifier si la requête a renvoyé un ensemble vide (en testant la valeur renvoyée) et de déplacer le curseur vers le premier résultat (lorsque l'ensemble n'est pas vide). Notez que pour vous prémunir contre un jeu de retour vide, le code que vous avez posté devrait tester la valeur de retour (ce qu'il ne fait pas).

Contrairement à l'appel à moveToFirst(), le test de if(c!=null) est inutile; query() renverra un objet Cursor ou lèvera une exception. Il ne retournera jamais null.

55
Ted Hopp
if (c.moveToFirst()) {
  while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
    ...
    c.moveToNext();
  } 
}
9
macio.Jun

la méthode moveToFirst () déplace le curseur sur la première ligne. Cela permet de tester si la requête a renvoyé un ensemble vide ou non. Voici un exemple de son implémentation,

if (cursor.getCount() == 0 || !cursor.moveToFirst()) {

return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN)); 

cursor.close(); 
0
WaterRocket8236

Le curseur n'est pas une ligne du résultat de la requête. Le curseur est un objet pouvant itérer sur les lignes de résultat de votre requête. Le curseur peut se déplacer à chaque rangée. La méthode .moveToFirst() le déplace vers la première ligne de la table de résultats.

0
Bobs