27

有没有办法从 SQLite 获取 ContentValues 对象?

它非常有用,我们可以在 DB 中插入 ContentValues,从那里获取 CV 应该更有用。

4

5 回答 5

60

您可以使用DatabaseUtils类的方法cursorRowToContentValues(Cursor cursor, ContentValues values) 。

例子

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();  
于 2012-01-03T08:03:11.570 回答
3

我编写了自己的DatabaseUtils.cursorRowToContentValuesDavid-mu 提到的方法版本,以避免解析 booleans 时出现错误。它要求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;
}
于 2015-01-19T06:30:27.190 回答
2

你可以去thenewboston那里有一个 111-124 的 SQLite(和使用 ContentValues)的 tut:D

反正他教的 ContentValues 是在第 117

祝你好运:D

PS:但他也使用光标:)

于 2012-03-19T08:06:45.487 回答
1

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

于 2011-10-28T17:08:03.567 回答
0

不,您必须使用Cursor.

于 2011-10-28T17:07:15.070 回答