在 CursorAdapter 中使用 String 作为 _id
Using String as _id in CursorAdapter
使用 CursorAdapter 的要求是:
The Cursor must include a column named "_id" or this class will not work.
从 getItemId()
签名和 CursorAdapter 源代码可以清楚地看出,该列应该是整数类型:
/**
* @see android.widget.ListAdapter#getItemId(int)
*/
public long getItemId(int position) {
if (mDataValid && mCursor != null) {
if (mCursor.moveToPosition(position)) {
return mCursor.getLong(mRowIDColumn);
} else {
return 0;
}
} else {
return 0;
}
}
我真的很想能够使用另一个包含文本(UUID 字符串)的列作为我的 _id
,但看起来这不太可能。
如果我的数据库架构(在外部定义)不包含整数 _id
列,我有哪些选项可以强制使用非整数列或在其中制造 _id
列查询输出?
If my database schema (which is defined externally) does not include an integer _id column, what options do I have for coercing a non-integer column, or manufacturing an _id column in the query output?
每个 sqlite 行都有一个唯一的 ROWID
,它是一个整数。你可以select它作为ID:
String[] columns = new String[] { "rowid AS _id", ... };
如果您的 table 碰巧有一个 INTEGER PRIMARY KEY
列,它将使用 rowid 作为别名。
使用 CursorAdapter 的要求是:
The Cursor must include a column named "_id" or this class will not work.
从 getItemId()
签名和 CursorAdapter 源代码可以清楚地看出,该列应该是整数类型:
/**
* @see android.widget.ListAdapter#getItemId(int)
*/
public long getItemId(int position) {
if (mDataValid && mCursor != null) {
if (mCursor.moveToPosition(position)) {
return mCursor.getLong(mRowIDColumn);
} else {
return 0;
}
} else {
return 0;
}
}
我真的很想能够使用另一个包含文本(UUID 字符串)的列作为我的 _id
,但看起来这不太可能。
如果我的数据库架构(在外部定义)不包含整数 _id
列,我有哪些选项可以强制使用非整数列或在其中制造 _id
列查询输出?
If my database schema (which is defined externally) does not include an integer _id column, what options do I have for coercing a non-integer column, or manufacturing an _id column in the query output?
每个 sqlite 行都有一个唯一的 ROWID
,它是一个整数。你可以select它作为ID:
String[] columns = new String[] { "rowid AS _id", ... };
如果您的 table 碰巧有一个 INTEGER PRIMARY KEY
列,它将使用 rowid 作为别名。