在CursorAdapter中使用String作为_id

时间:2015-01-29 11:40:45

标签: android sqlite android-cursoradapter

要求使用CursorAdapter

  

Cursor必须包含名为“_id”的列,否则此类将无效。

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列输出

1 个答案:

答案 0 :(得分:3)

  

如果我的数据库模式(在外部定义)不包含整数_id列,我可以使用哪些选项来强制非整数列,或在查询输出中制作_id列?

每个sqlite行都有一个唯一的ROWID,它是一个整数。您可以选择它作为ID:

String[] columns = new String[] { "rowid AS _id", ... };

如果您的表恰好有INTEGER PRIMARY KEY列,则会使用rowid别名。

参考:https://www.sqlite.org/lang_createtable.html#rowid