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.
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
.
if (c.moveToFirst()) {
while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
...
c.moveToNext();
}
}
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();
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.