Каков предпочтительный способ запроса нескольких таблиц в Android - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть довольно прямая таблица ссылок, представляющая модули и преподавателей

    final String table = "module_tutor";
    final String[] columns = {"module_id"};
    final String where = "tutor_id = ?";
    final String[] whereArgs = {String.valueOf(tutorID)};
    final String groupBy = null;
    final String having = null;
    final String orderBy = "module_id";

    Cursor c = getDbAdapter().selectRecordsFromDB(table, columns, where, whereArgs,  groupBy, having, orderBy);

Этот курсор затем содержит все записи module_id, где этот конкретный преподаватель является преподавателем, что я хочу, чтобы получить всесведения о модуле, которые хранятся в другой таблице.

Каков наилучший способ получить их, использовать ли значения из курсора для создания действительно длинного необработанного SQL-запроса в цикле, добавляя module_id, в то время каку курсора есть следующая запись, или я должен отказаться от использования курсора и написать SQL-запрос вдоль строк

SELECT module_title, module_credit, module_xyz
FROM modules
WHERE module_id IN
    (
     SELECT module_id
     FROM module_tutor
     WHERE tutor_id = ?
    )

, если последний предпочтителен, хотя я бы предпочел этого избежать, поскольку моя структура таблицы могла быэто изменение точки и первое решение проще в управлении, как мне реализовать это в SQLite - как только у меня будет внутренняя база данных для моего приложения, я намереваюсь выставить ее через провайдера контента, поэтому решение с курсором снова кажется предпочтительным, как мне кажетсянемного ближе к тому, как я, наконец, в конечном итоге тыспой базу данных в моем приложении.

1 Ответ

0 голосов
/ 12 декабря 2011

Вам не нужно использовать вложенный выбор, просто объедините две таблицы:

select module_title, module_credit from modules m, module_tutor mt 
where mt.module_id=m.id and mt.tutori_id=?

Если у вас есть ContentProvider, вам не нужно показывать фактическую структуру таблицы и т. Д.,поэтому вы должны быть относительно свободны вносить изменения в базовую базу данных.Используйте то, что когда-либо было проще и эффективнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...