Android SQLite - 光标和内容值
Posted
技术标签:
【中文标题】Android SQLite - 光标和内容值【英文标题】:Android SQLite - Cursor & ContentValues 【发布时间】:2011-12-17 11:02:30 【问题描述】:有没有办法从 SQLite 获取 ContentValues 对象?
非常有用,我们可以在 DB 中插入 ContentValues,从那里获取 CV 应该更有用。
【问题讨论】:
【参考方案1】:你可以使用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();
【讨论】:
【参考方案2】:我编写了我自己版本的 DatabaseUtils.cursorRowToContentValues
方法,David-mu 提到了该方法以避免 a bug with parsing booleans。它要求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;
【讨论】:
【参考方案3】:你可以去thenewboston 111-124 有一个 SQLite(和使用 ContentValues)的 tut:D
反正他教的关于 ContentValues 的那个在117th
祝你好运:D
PS : 但他也使用光标:)
【讨论】:
【参考方案4】:没有。你必须用光标和旧的好查询来做到这一点。如果查询可以返回一个 CV 对象数组,我会很高兴。
【讨论】:
【参考方案5】:不,您必须使用Cursor
。
【讨论】:
以上是关于Android SQLite - 光标和内容值的主要内容,如果未能解决你的问题,请参考以下文章