Android: беды ViewBinder и SimpleCursorAdapter SQL
Я изо всех сил пытаюсь заставить более сложные запросы работать с SimpleCursorAdapter и ViewBinder с ListView. Когда я просто возвращал все записи в моей таблице, это не было проблемой. Однако я хочу вернуть список имен исполнителей из моих таблиц в порядке имен. Большая проблема связана с полем "rowid _id", которое ожидает SimplerCursorAdapter/ViewBinder.
Мой код работал нормально, когда у меня были запросы вида 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), я получаю исключения "no такие столбцы 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 Manager (инструмент тестирования) тоже не нравится, когда у меня есть запрос с объединением. Кажется, он работает только с простым запросом к одной таблице. Так что, если это так... как мне сделать этот запрос без него для SimpleCursorAdapter & ViewBinder?
1 ответ
Ответ заключался в том, чтобы забыть об использовании 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 );