Странная проблема с курсором — Android

Это метод в моем классе базы данных:

public Cursor fetchFavTitles() {
    return myDataBase.rawQuery("SELECT rowid as _id, title
        FROM table1 JOIN table2 JOIN table3 JOIN table4 JOIN table5 JOIN table6
        WHERE fav = TRUE", null);
}

В моей базе данных SQLite есть 6 таблиц:

  1. table1 => rowid, title, content, fav
  2. table2 => rowid, title, content, fav
  3. table3 => rowid, title, content, fav
  4. table4 => rowid, title, content, fav
  5. table5 => rowid, title, content, fav
  6. table6 => rowid, title, fav

В своей деятельности я написал следующее:

Cursor cursor = myDbHelper.fetchFavTitles();

и приложение принудительно закрывает!

Любая идея, где я ошибаюсь?

ОБНОВЛЕНИЕ

Это снимок LogCat, я не мог его понять, я отфильтровал вывод с помощью android.database: введите описание изображения здесь

То, что я пытаюсь сделать, это получить title (тип: TEXT), у которых есть fav (тип: BOOL) со значением TRUE Из всех таблиц и отобразить их в одном ListView (используя SimpleCursorAdapter).


person iTurki    schedule 11.07.2011    source источник
comment
Для тех, кому интересно, мне НУЖНО иметь разные таблицы, даже если они имеют одинаковые атрибуты. Так что merging the database tables не вариант :)   -  person iTurki    schedule 11.07.2011
comment
Что, по словам LogCat, является исключением, из-за которого приложение закрывается?   -  person E.Z. Hart    schedule 11.07.2011
comment
Я обновил его, пожалуйста, посмотрите   -  person iTurki    schedule 11.07.2011
comment
Можете ли вы объяснить больше @dziobas?   -  person iTurki    schedule 11.07.2011


Ответы (1)


Не понимая точно, что вы собираетесь делать, я предполагаю, что вам нужно изменить свой запрос на:

SELECT rowid as _id, title
        FROM table1 
        WHERE fav = TRUE
UNION ALL
SELECT rowid as _id, title
        FROM table2
        WHERE fav = TRUE
UNION ALL
SELECT rowid as _id, title
        FROM table3
        WHERE fav = TRUE
UNION ALL   
SELECT rowid as _id, title
        FROM table4 
        WHERE fav = TRUE
UNION ALL       
SELECT rowid as _id, title
        FROM table5 
        WHERE fav = TRUE
UNION ALL       
SELECT rowid as _id, title
        FROM table6 
        WHERE fav = TRUE

Это возьмет все результаты, где «избранное = TRUE» из каждой таблицы, и поместит их все в один набор результатов. Если вам не нужны дубликаты, вы можете изменить «СОЮЗ ВСЕХ» на «СОЮЗ». Прямо сейчас ваш запрос не работает, потому что «SELECT rowid as _id, title» не знает, из какой из ваших таблиц извлечь поле «title».

person E.Z. Hart    schedule 11.07.2011
comment
Хотя это кажется решением, но оно не сработало! LogCat говорит: there is no such column fav. Если я уберу предложение WHERE из запроса, все будет в порядке. К вашему сведению, я добавил столбец fav в таблицы после того, как импортировал их из файла XML (с помощью надстройки SQLite Manager FF). Это имеет значение? - person iTurki; 11.07.2011
comment
Я решил это :-D. Это как вы кодируете. Вам нужно только добавить атрибут fav в оператор SELECT. Не спрашивайте меня, почему! Спасибо чувак. Очень ценю вашу помощь :) - person iTurki; 11.07.2011