Android SQLite - 光标& ContentValues

时间:2011-10-28 17:02:01

标签: android sqlite cursor

有没有办法从SQLite获取ContentValues对象?非常有用,我们可以在DB中插入ContentValues,从那里获取CV应该更有用。

5 个答案:

答案 0 :(得分:57)

您可以使用cursorRowToContentValues(Cursor cursor, ContentValues values)类的方法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();  

答案 1 :(得分:3)

我编写了自己的David {mu提到的DatabaseUtils.cursorRowToContentValues方法版本,以避免a bug with parsing booleans。它要求Cursor根据SQL数据库中的类型解析int和float,而不是在调用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 :(得分:2)

你可以转到thenewboston来自111-124的SQLite(并使用ContentValues):D

无论如何,他讲授ContentValues的是117th

祝你好运:D

PS:但他也使用Cursor:)

答案 3 :(得分:1)

没有。你必须用光标和旧的好查询来做到这一点。如果查询可以返回一个CV对象数组,我会很高兴。

答案 4 :(得分:0)

不,你必须使用Cursor