【发布时间】:2014-08-26 21:29:05
【问题描述】:
我正在努力让更复杂的查询与 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,我该如何使这个查询工作?
【问题讨论】:
-
@Luksprog:实际上,我发现在查看我的问题以查看哪些问题与 Android 相关时更容易。这会让版主非常不安吗?
-
没有特别的规定,它只是遵守网站的建议。它只是广告混乱,您可以使用额外的空间来提出更好的标题(这对您将来修改问题很有好处),ViewBinder & SimpleCursorAdapter SQL woes 不是很清楚显示问题(同时吸引更合适的帮助)。
-
我看到
rowid和_id之间有一个空格,是拼写错误吗? -
@shayanpourvatan:是的,这是故意的。这意味着将 rowid 别名为“_id”。无论如何我已经找到了解决方案,如果其他人有同样的问题,我会发布我的答案。
标签: android sqlite simplecursoradapter android-viewbinder