Android:列“_id”不存在

我得到这个错误

IllegalArgumentException:列'_id'不存在

当使用SimpleCursorAdapter从我的数据库中检索时,表确实有这个_id列。 注意到这是一个常见的问题,我试图解决它的一些在线解决scheme,但没有一个工作。 这是我的光标查询:

 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 

这工作正常,并提供必要的“_id”列SimpleCursorAdapter。

编辑:据我了解,_id字段被用作一个唯一的键,以确保游标处理的数据可以通过适配器和适配器等正确处理等。

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

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

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

您的表中没有“_id”列,或者没有将其包含在查询中。 那是什么导致了exception。 您还需要修复以下内容:

CursorAdapter构造函数的最后一个参数缺less_id的列引用。

int []参数是一个视图标识数组,用来填充游标中的值。 String []参数是光标指向的行的列名称数组。

与数组相同,您必须在from数组中具有相同数量的值。 因为光标的数据被从光标中抓取并放到视图中。 如果每个数组中的值不相同,则适配器将引发exception,因为它没有适当的信息量将数据映射到视图。

此外,根据SimpleCursorAdapter的JavaDoc,该构造函数已被弃用,因为它会导致查询在UI线程中执行。 哪个不好。 改用这个:

http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html#SimpleCursorAdapter%28android.content.Context,%20int,%20android.database.Cursor,%20java.lang.String [],%20int [ ],%20int%29

一个简单的解决方法是将“,0”添加到参数列表的末尾。

如果您正尝试在您的Android应用程序中使用现有的sqlite数据库,那么您需要做一些准备工作才能使其正常工作。 这篇博文详细介绍了这个过程。

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/