Android SQLite - 光标和内容值

Posted

技术标签:

【中文标题】Android SQLite - 光标和内容值【英文标题】:Android SQLite - Cursor & ContentValues 【发布时间】:2011-12-17 11:02:30 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你可以使用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();  

【讨论】:

【参考方案2】:

我编写了我自己版本的 DatabaseUtils.cursorRowToContentValues 方法,David-mu 提到了该方法以避免 a bug with parsing 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;

【讨论】:

【参考方案3】:

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

反正他教的关于 ContentValues 的那个在117th

祝你好运:D

PS : 但他也使用光标:)

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

不,您必须使用Cursor

【讨论】:

以上是关于Android SQLite - 光标和内容值的主要内容,如果未能解决你的问题,请参考以下文章

SQLite Android 数据库光标窗口分配 2048 kb 失败

Android 使用 SQLite 光标显示下一项或上一项

如何从光标中获取布尔值(Java SQLite)

如何通过光标获取android中的时间戳列值?

设置外键时,光标找不到列

光标更新后,Android CursorTreeAdapter 不更新组光标/折叠组