wake-up-neo.com

Iteriere durch Zeilen von Sqlite-Query

Ich habe ein Tabellenlayout, das ich mit dem Ergebnis einer Datenbankabfrage füllen möchte. Ich verwende "Alle auswählen" und die Abfrage gibt vier Datenzeilen zurück. 

Ich verwende diesen Code, um die Textansichten in den Tabellenzeilen aufzufüllen. 

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);

Ich möchte in der Lage sein, die vier verschiedenen Werte von KEY_ALT zu trennen und zu wählen, wohin sie gehen. Ich möchte, dass sie vier verschiedene Textansichten anstelle von einer in meinem obigen Beispiel füllen. Wie kann ich den resultierenden Cursor durchlaufen?

Grüße, AK

50
kakka47

Sie können den folgenden Code verwenden, um durch den Cursor zu gehen und sie in einem String-Array zu speichern. Anschließend können Sie sie in vier Textansicht festlegen

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

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

Cursor-Objekte, die von Datenbankabfragen zurückgegeben werden, sind vor der erste Eintrag. Daher kann die Iteration vereinfacht werden:

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

Referenz aus SQLiteDatabase .

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

Iteration kann auf folgende Weise durchgeführt werden:

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

Ich stimme dem chiranjib zu.

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

Eine sehr einfache Möglichkeit gefunden, einen Cursor zu durchlaufen

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());
    }


}

HINWEIS: Um SQLiteQueryBuilder () verwenden zu können, müssen Sie hinzufügen 

kompilieren Sie 'com.readystatesoftware.sqliteasset: sqliteassethelper: +' in deiner Notenakte 

0
Deepak Kataria