我收到这个错误
IllegalArgumentException: column '_id' does not exist
当使用 SimpleCursorAdapter
从我的数据库中检索时,表确实有这个 _id
列。注意到这是一个常见问题,我尝试通过提供一些在线解决方案来解决这个问题,但没有一个有效。这是我的游标查询:
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"_id", "quote"}, new int[]{R.id.quote});
虽然我应该提到原始不包括 _id
列,但我最近添加了这个以尝试解决问题。有没有人有任何可能有助于解决问题的想法?
最佳答案
您的数据库不一定要有名为“_id”的列,但 SimpleCursorAdaptor 确实需要返回一个。您可以使用别名执行此操作。
一个例子是我有一个包含列的表...
uid,name,number
为了查询 SimpleCursorAdapter,我使用数据库 rawQuery
...
SELECT uid as _id,name,number FROM MY_TABLE
这工作正常并为 SimpleCursorAdapter 提供必要的“_id”列。
编辑: 据我了解,_id 字段用作唯一键以确保游标处理的数据可以由适配器和适配器 View 等正确处理。
查看 Content Providers 文档中的数据模型.
在任何类型的“数据库”中使用唯一键是非常普遍的做法,据我所知,使用列名“_id”(或“_ID”)只是一种标准化和跨数据库、内容提供者、游标、适配器等简化事情
简而言之,为了让这些不同的组件正常工作,它们需要一个具有唯一值的数据列,但它们还必须“知道”该列的名称。他们不会“知道”,可以这么说,我的列名称“uid”是他们需要的,而不是我的“名称”和“数字”列。
关于Android: 列 '_id' 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825020/