SQLite から ContentValues オブジェクトを取得する方法はありますか?
DB に ContentValues を挿入できることは非常に便利で、そこから CV を取得する方が便利です。
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 が言及したメソッドの独自のバージョンを作成しました。でメソッドを呼び出すときに int と float を解析するのではなく、SQL データベースの型に基づいて int と float を解析するように に要求します。Cursor
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;
}
いいえ、カーソルと古き良きクエリでそれを行う必要があります。query が CV オブジェクトの配列を返すことができれば幸いです。
いいえ、 を使用する必要がありますCursor
。