SQLiteからContentValuesオブジェクトを取得する方法はありますか? DBにContentValuesを挿入できることは非常に便利であり、そこからCVを取得する方が便利なはずです。
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();
私は自分のバージョンの 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;
}
あなたは行くことができます thenewboston 111-124からSQLite(そしてContentValuesを使用する)のためのツタンカーメンがあります:D
とにかく、彼がContentValuesについて教えたのは 117th
幸運:D
PS:しかし、彼はカーソルも使用しています:)
いいえ。カーソルと古き良きクエリでそれを行う必要があります。クエリがCVオブジェクトの配列を返すことができれば幸いです。
いいえ、Cursor
を使用する必要があります。