Question Itérer à travers les lignes de Sqlite-query


J'ai une disposition de table que je veux remplir 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 remplissent quatre vues de texte différentes au lieu d'une dans mon exemple ci-dessus. Comment puis-je parcourir le curseur résultant?

Cordialement, AK


50
2018-02-07 11:04


origine


Réponses:


Vous pouvez utiliser le code ci-dessous pour passer le curseur et les stocker dans un tableau de chaînes et après vous pouvez les définir dans quatre textview

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

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

80
2018-02-07 11:17



Cursor les objets renvoyés par les requêtes de base de données sont positionnés avant la première entrée, donc l'itération peut être simplifiée pour:

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

Référence de SQLiteDatabase.


108
2017-10-05 08:06



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

29
2017-07-22 14:28



L'itération peut se faire 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
2018-02-07 11:14



Je suis d'accord avec chiranjib, mon code est le suivant:

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

3
2018-04-24 01:49



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
2018-01-28 12:47



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

compiler 'com.readystatesoftware.sqliteasset: sqliteassethelper: +'       dans votre dossier de notes


0
2017-11-24 07:26