web-dev-qa-db-fra.com

Itérer dans les lignes de Sqlite-query

J'ai une disposition de table que je veux renseigner avec le résultat d'une requête de base de données. J'utilise un select all et la requête renvoie quatre lignes de données. 

J'utilise ce code pour remplir les vues de texte à l'intérieur des lignes du tableau 

Cursor c = null;
        c = dh.getAlternative2();
        startManagingCursor(c);
        // the desired columns to be bound
        String[] columns = new String[] {DataHelper.KEY_ALT};
        // the XML defined views which the data will be bound to
        int[] to = new int[] { R.id.name_entry};

         SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, 
                 R.layout.list_example_entry, c, columns, to);
         this.setListAdapter(mAdapter);

Je veux pouvoir séparer les quatre valeurs différentes de KEY_ALT et choisir leur destination. Je veux qu'ils peuplent quatre textviews différents au lieu d'un dans l'exemple ci-dessus. Comment puis-je parcourir le curseur résultant?

Cordialement, AK

50
kakka47

Vous pouvez utiliser le code ci-dessous pour parcourir le curseur et les stocker dans un tableau de chaînes. Vous pouvez ensuite les définir dans quatre vues de texte.

String array[] = new String[cursor.getCount()];
i = 0;

cursor.moveToFirst();
while (!cursor.isAfterLast()) {
    array[i] = cursor.getString(0);
    i++;
    cursor.moveToNext();
}
80
chikka.anddev

Les objets Cursor renvoyés par les requêtes de base de données sont positionnés avant dans la première entrée. Par conséquent, l'itération peut être simplifiée comme suit:

while (cursor.moveToNext()) {
    // Extract data.
}

Référence de SQLiteDatabase .

109
happydude
for (boolean hasItem = cursor.moveToFirst(); hasItem; hasItem = cursor.moveToNext()) {
    // use cursor to work with current item
}
29
Juozas Kontvainis

L'itération peut être effectuée de la manière suivante:

Cursor cur = sampleDB.rawQuery("SELECT * FROM " + Constants.TABLE_NAME, null);
ArrayList temp = new ArrayList();
if (cur != null) {
    if (cur.moveToFirst()) {
        do {
            temp.add(cur.getString(cur.getColumnIndex("Title"))); // "Title" is the field name(column) of the Table                 
        } while (cur.moveToNext());
    }
}
20
chiranjib

J'accepte de chiranjib, mon code est le suivant:

if(cursor != null && cursor.getCount() > 0){
  cursor.moveToFirst();
  do{
    //do logic with cursor.
  }while(cursor.moveToNext());
}
3
Jason H

Trouvé un moyen très simple d'itérer sur un curseur

for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){


    // access the curosr
    DatabaseUtils.dumpCurrentRowToString(cursor);
    final long id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));


}
3
passsy
public void SQLfunction() {
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = {"column1","column2" ...};
    String sqlTable = "TableName";
    String selection = "column1= ?"; //optional
    String[] selectionArgs = {Value}; //optional

    qb.setTables(sqlTable);
    final Cursor c = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null);

   if(c !=null && c.moveToFirst()){
        do {
           //do operations
           // example : abcField.setText(c.getString(c.getColumnIndex("ColumnName")))

          }
        while (c.moveToNext());
    }


}

REMARQUE: pour utiliser SQLiteQueryBuilder (), vous devez ajouter 

compilez 'com.readystatesoftware.sqliteasset: sqliteassethelper: +' dans votre dossier 

0
Deepak Kataria