27 Stimmen

Android SQLite - Cursor & ContentValues

Gibt es eine Möglichkeit, das ContentValues-Objekt aus der SQLite-Datei zu erhalten?

Es ist sehr nützlich, dass wir ContentValues in die DB einfügen können, und es sollte noch nützlicher sein, den Lebenslauf von dort zu erhalten.

61voto

David-mu Punkte 1742

Sie können die Methode cursorRowToContentValues(Cursor cursor, ContentValues values) der DatabaseUtils Klasse.

ejemplo

Cursor c = db.query(tableName, 
            tableColumn, 
            where, 
            whereArgs,
            groupBy,
            having,
            orderBy);

ArrayList<ContentValues> retVal = new ArrayList<ContentValues>();
ContentValues map;  
if(c.moveToFirst()) {       
   do {
        map = new ContentValues();
        DatabaseUtils.cursorRowToContentValues(c, map);                 
        retVal.add(map);
    } while(c.moveToNext());
}

c.close();

3voto

gengkev Punkte 1810

Ich habe meine eigene Version des DatabaseUtils.cursorRowToContentValues Methode, die David-mu erwähnt hat, um zu vermeiden ein Fehler beim Parsen von Booleschen Werten . Sie fragt die Cursor um Ints und Floats auf der Grundlage der Typen in der SQL-Datenbank zu analysieren, anstatt sie beim Aufruf der Methoden in ContentValues .

public static ContentValues cursorRowToContentValues(Cursor cursor) {
    ContentValues values = new ContentValues();
    String[] columns = cursor.getColumnNames();
    int length = columns.length;
    for (int i = 0; i < length; i++) {
        switch (cursor.getType(i)) {
            case Cursor.FIELD_TYPE_NULL:
                values.putNull(columns[i]);
                break;
            case Cursor.FIELD_TYPE_INTEGER:
                values.put(columns[i], cursor.getLong(i));
                break;
            case Cursor.FIELD_TYPE_FLOAT:
                values.put(columns[i], cursor.getDouble(i));
                break;
            case Cursor.FIELD_TYPE_STRING:
                values.put(columns[i], cursor.getString(i));
                break;
            case Cursor.FIELD_TYPE_BLOB:
                values.put(columns[i], cursor.getBlob(i));
                break;
        }
    }
    return values;
}

2voto

Blaze Tama Punkte 10557

Sie können gehen zu thenewboston es gibt ein Tutorial für SQLite (und die Verwendung von ContentValues) von 111-124 :D

Wie auch immer, das, was er über ContentValues gelehrt hat, ist in der 117.

Viel Glück :D

PS: Aber er benutzt auch einen Cursor :)

1voto

Nikola Despotoski Punkte 48592

Nein. Sie müssen das mit einem Cursor und einer guten alten Abfrage machen. Ich würde mich freuen, wenn die Abfrage ein Array von CV-Objekten zurückgeben könnte.

0voto

Giohji Punkte 704

Nein, Sie müssen die Cursor .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X