Android:列'_id'不存在

Min*_*rip 8 sqlite android android-sqlite android-cursoradapter

我收到了这个错误

IllegalArgumentException:列'_id'不存在

当使用a SimpleCursorAdapter从我的数据库中检索时,表确实有这个_id列.注意到这是一个常见问题,我尝试在线解决一些解决方案,但没有一个能够解决.这是我的游标查询:

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"_id", "quote"}, new int[]{R.id.quote});
Run Code Online (Sandbox Code Playgroud)

虽然我应该提到原来没有包含该_id列,但我最近添加了这个以尝试解决问题.有没有人有任何可能有助于解决问题的想法?

Squ*_*onk 15

您的数据库不必具有名为"_id"的列,但SimpleCursorAdaptor确实需要返回一个.您可以使用别名执行此操作.

一个例子是我有一个带有列的表...

uid,name,number
Run Code Online (Sandbox Code Playgroud)

要查询SimpleCursorAdapter,我用数据库来做rawQuery...

SELECT uid as _id,name,number FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)

这很好,并为SimpleCursorAdapter提供必要的'_id'列.

编辑:据我所知,_id字段用作唯一键,以确保适配器和适配器视图等可以正确处理光标处理的数据.

查看内容提供商文档中的数据模型.

使用任何类型的"数据库"中的唯一键是非常普遍的做法,据我所知,使用列名'_id'(或'_ID')只是一种标准化和简化事物的方法.数据库,内容提供商,游标,适配器等

简而言之,为了使这些不同的组件正常工作,它们需要一个具有唯一值的数据列,但它们还必须"知道"该列的名称.他们不会"知道",可以说,我的专栏名称'uid'是他们需要的名字而不是我的'名字'和'数字'专栏.