web-dev-qa-db-fra.com

Obtenez la valeur du champ avec un curseur

Je crée une application et j'ai des problèmes avec Cursor. J'ai un SQLiteDatabase qui me renvoie un Cursor lorsque j'essaye de récupérer les valeurs avec cette fonction:

public Cursor fetchOption(long rowId) throws SQLException {

    Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
        KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
        null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

Je ne sais pas comment obtenir la valeur du champ dans le Cursor. Si je fais ça comme ça:

String a = mOptionDb.fetchOption(0).getColumnName(0).toString();
String b = mOptionDb.fetchOption(0).getColumnName(1).toString();
String c = mOptionDb.fetchOption(0).getColumnName(2).toString();

J'obtiens uniquement le nom des colonnes (_id, title, body) mais pas les valeurs. Avez-vous des suggestions sur la façon d'y parvenir?

30
Michaël

Je pense que vous pouvez oublier de vérifier null.

Vérifiez plutôt s'il y a des données, puis accédez aux colonnes à l'aide du curseur:

Cursor cursor = fetchOption(0);

if (cursor.moveToFirst()) // data?
   System.out.println(cursor.getString(cursor.getColumnIndex("title")); 

cursor.close(); // that's important too, otherwise you're gonna leak cursors

Il peut également être judicieux de lire un tutoriel Android. Le tutoriel du bloc-notes semble correspondre à la facture: http://developer.Android.com/guide/tutorials/notepad/index .html

88
Mariano Kamp

Vous pouvez utiliser le Cursor's get* méthodes pour récupérer les valeurs du résultat:

long id = cursor.getLong(cursor.getColumnIndex("_id"));
long title = cursor.getString(cursor.getColumnIndex("title"));
...

Il est évidemment préférable d'utiliser des constantes (souvent fournies par ContentProviders) au lieu d'appeler getColumnIndex avec des chaînes codées en dur.

15
Josef Pfleger

Vous pouvez utiliser ce mécanisme.

Cursor record=db.test(finalDate);     
if(record.getCount()!=0){
    if(record.moveToFirst()){
        do{               
            Imgid1=record.getString(record.getColumnIndex(Database.PHOTO));                
        }while(record.moveToNext());                          
    } 
    record.close();        
}
7
user1292458