我正在努力让更复杂的查询与ListView一起使用SimpleCursorAdapter和ViewBinder。当我刚刚返回表格中的所有条目时,这没有问题。但是,我想按名称顺序从表中返回艺术家名称列表。最大的问题是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?
答案 0 :(得分:0)
答案是忘记使用rowid并使用我自己的Artist.ID字段。只要我将字段名称别名为_id(SimpleCursorAdapter在第0列中所期望的那样),这将起作用。
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 );