Android SQLite - Курсор и ContentValues - PullRequest
       20

Android SQLite - Курсор и ContentValues

25 голосов
/ 28 октября 2011

Есть ли способ получить объект ContentValues ​​из SQLite? Очень полезно, что мы можем вставить ContentValues ​​в БД, и было бы более полезно получить оттуда CV.

Ответы [ 5 ]

57 голосов
/ 03 января 2012

Вы можете использовать метод cursorRowToContentValues ​​(курсор курсора, значения ContentValues) класса DatabaseUtils .

пример

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();  
3 голосов
/ 19 января 2015

Я написал свою собственную версию метода DatabaseUtils.cursorRowToContentValues, которую Дэвид-му упомянул, чтобы избежать ошибки при разборе логических значений .Он просит Cursor анализировать числа и числа с плавающей запятой на основе типов в базе данных SQL, а не анализировать их при вызове методов в 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;
}
2 голосов
/ 19 марта 2012

Вы можете перейти к thenewboston , есть параграф для SQLite (и с использованием ContentValues) от 111-124: D

Во всяком случае, тот, кого он учил о ContentValues, находится в 117th

Удачи: D

PS: Но он также использует Курсор:)

1 голос
/ 28 октября 2011

Нет.Вы должны сделать это с помощью курсора и старого доброго запроса.Я был бы счастлив, если бы запрос мог вернуть массив объектов CV.

0 голосов
/ 28 октября 2011

Нет, вы должны использовать Cursor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...