0

我正在努力让更复杂的查询与 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,我该如何使这个查询工作?

4

1 回答 1

0

答案是忘记使用 rowid 并改用我自己的 Artist.ID 字段。只要我将字段名称别名为 SimpleCursorAdapter 在第 0 列中期望的 _id,这将起作用。

String sQuery = String.format( "SELECT DISTINCT Artist.ID  _id, Artist.Name  FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );
于 2014-07-06T06:22:45.653 回答