web-dev-qa-db-fra.com

Android SQLite - Cursor & ContentValues

Existe-t-il un moyen d'obtenir l'objet ContentValues ​​à partir de SQLite? Il est très utile que nous puissions insérer ContentValues ​​dans une base de données, et il devrait être plus utile d’obtenir le CV à partir de là.

25
arts777

Vous pouvez utiliser la méthode cursorRowToContentValues ​​(curseur de curseur, valeurs ContentValues) du DatabaseUtils class.

exemple

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();  
57
David-mu

J'ai écrit ma propre version de la méthode DatabaseUtils.cursorRowToContentValues que David-mu a mentionnée afin d'éviter un bug avec l'analyse syntaxique des booléens . Il demande à Cursor d'analyser les ints et les floats en fonction des types de la base de données SQL, plutôt que de les analyser lors de l'appel des méthodes dans 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;
}
3
gengkev

Vous pouvez aller à thenewboston il y a un tut pour SQLite (et en utilisant ContentValues) de 111-124: D

Quoi qu'il en soit, celui qu'il a enseigné à propos de ContentValues ​​se trouve dans le 117e

Bonne chance: D

PS: Mais il utilise aussi un curseur :)

2
Blaze Tama

Non, vous devez le faire avec un curseur et une bonne vieille requête. Je serais heureux si query pouvait renvoyer un tableau d'objets CV.

1
Nikola Despotoski

Non, vous devez utiliser la variable Cursor.

0
Giohji