web-dev-qa-db-ja.com

Android SQLite-カーソルとContentValues

SQLiteからContentValuesオブジェクトを取得する方法はありますか? DBにContentValuesを挿入できることは非常に便利であり、そこからCVを取得する方が便利なはずです。

25
int_32

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();  
57
David-mu

私は自分のバージョンの DatabaseUtils.cursorRowToContentValues 回避するためにDavid-muが言及した方法 ブール値の解析に関するバグ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;
}
3
gengkev

あなたは行くことができます thenewboston 111-124からSQLite(そしてContentValuesを使用する)のためのツタンカーメンがあります:D

とにかく、彼がContentValuesについて教えたのは 117th

幸運:D

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

2
Blaze Tama

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

1

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

0
Giohji