有没有办法从SQLite中获取ContentValues对象?
我们可以将ContentValues插入到数据库中,从那里获取CV会更加有用。
有没有办法从SQLite中获取ContentValues对象?
我们可以将ContentValues插入到数据库中,从那里获取CV会更加有用。
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 提到的 解析布尔值时出现的 bug。该方法要求 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;
}
无论如何,他所讲的关于ContentValues的内容在第117节。
祝你好运:D
附注:但他也使用了Cursor :)
不行,你必须使用 Cursor
。