我正在努力让更复杂的查询与 SimpleCursorAdapter 和 ViewBinder 与 ListView 一起使用。当我刚刚返回表中的所有条目时,这没问题。但是,我想按名称顺序从我的表中返回艺术家姓名列表。最大的问题涉及 SimplerCursorAdapter/ViewBinder 期望的“rowid _id”字段。
当我查询 SELECT rowid _id、Artist.NAME 等表单时,我的代码运行良好,但我想使用 DISTINCT 关键字返回唯一的艺术家名称集。我不能把“rowid _id”放在“DISTINCT Artist.Name”之前,也不能放在后面。解决方案是什么?
我想要的查询(A)是(显示没有“rowid _id”):
String sQuery = String.format( "SELECT DISTINCT Artist.Name, Artist.ID FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );
为了澄清,这有效:
Cursor c = db.rawQuery( "SELECT rowid _id, Name, Rating FROM Tune ORDER BY Name", null );
每当我将 rowid _id 放回查询 (A) 时,我都会收到“没有这样的列 rowid”异常:
String sQuery = String.format( "SELECT rowid _id, Artist.Name, Artist.ID FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );
我究竟做错了什么?
编辑:我什至不明白“rowid _id”做了什么——当我有一个带有连接的查询时,我的 SQLite 管理器(测试工具)也不喜欢它。它似乎只适用于一个简单的 1 表查询.. 所以如果是这样的话.. 如果没有 SimpleCursorAdapter 和 ViewBinder,我该如何使这个查询工作?