我想使用SimpleCursorAdapter来填充我的ListActivity,但我得到了一个典型的异常,因为我的Cursor中没有'_id'字段。不幸的是,这种类型的查询没有为我提供一个字段,我可以使用my _id字段的形式:
SELECT DISTINCT room from tblRates WHERE resid='ABC' AND date='2011-10-17'
由于DISTINCT,我不能只添加_id。那么除了设置一个自定义适配器之外,我还能做些什么呢?
顺便说一句,我已经看过这篇文章了,所以我明白为什么我会得到错误。只是想知道如何在我正在做的查询类型中获得一个_id:
Android column '_id' does not exist?
3条答案
按热度按时间neskvpey1#
你可以做这样的事。。
这将为每一行添加一个值为1的_id列。另外,我认为sqlite为每个表都有一个隐藏的“rowid”列,如果你想让列的值不同而不是1的话。
hkmswyz62#
那么,除了设置自定义适配器之外,我还能做些什么呢?
除了自定义的
Adapter
方法之外,您还可以使用CursorWrapper
来添加自己的_id
值。只需从1
或其他开始顺序编号,并且不要试图将它们用作数据库中的实际键。:-)更新
即兴发挥...
步骤1:创建
CursorWrapper
的子类。第2步:挂起 Package 的
Cursor
的getColumnCount()
值,这里称为N
。第3步:重写
getColumnCount()
以返回N+1
。第3步:重写
getColumnIndex()
以返回N
作为_id
列索引。第4步:覆盖所有其他以
int columnIndex
为参数的方法。如果索引不是N
,则将工作委托给 Package 的Cursor
;否则,您可以自己实现它(或者在不可能或不方便的情况下抛出一个RuntimeException
,并且您不需要它)。对于getInt()
和getLong()
实现(不确定CursorAdapter
使用哪个),返回一些可能的唯一值(例如,只需通过getPosition()
使用您的位置)。步骤5:创建子类的示例,用
DISTINCT
子句 PackageCursor
,并将其交给CursorAdapter
。zqry0prt3#
使用SQLiteDatabase中的“query”方法可能会有所帮助。
比如说