Android: 列 '_id' 不存在

标签 android sqlite android-sqlite android-cursoradapter

我收到这个错误

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/

相关文章:

android - 我想删除数据,直到数据库达到特定大小

android - 如何获取 Google Maps API v2 发布 key

SQLite批量插入多个表

c# - 我的 SQLite 数据库是在哪里创建的?

android - SQLiteFullException : database or disk is full (code 13) GreenDao

database - 删除表 vs 删除其内容 sqlite

java - 修复 Firebase 实时数据库问题

java - 用户名和密码不会保存在 Firebase 数据库中

android - Cordova 联系人插件并不总是显示联系人列表

php - 如何让sqlite查询在mysql上工作?