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.cursorRowToContentValuesを回避するために、David-mu が言及したメソッドの独自のバージョンを作成しました。でメソッドを呼び出すときに int と float を解析するのではなく、SQL データベースの型に基づいて int と float を解析するように に要求します。CursorContentValues

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

111-124から SQLite (および ContentValues を使用) の tut がある新しいボストンに行くことができます:D

とにかく、彼がContentValuesについて教えたのは117番目です

幸運を祈ります:D

PS:しかし、彼はカーソルも使用します:)

于 2012-03-19T08:06:45.487 に答える
1

いいえ、カーソルと古き良きクエリでそれを行う必要があります。query が CV オブジェクトの配列を返すことができれば幸いです。

于 2011-10-28T17:08:03.567 に答える
0

いいえ、 を使用する必要がありますCursor

于 2011-10-28T17:07:15.070 に答える