在android中查询多个表的首选方法是什么

时间:2011-12-11 23:59:48

标签: android database sqlite

我有一个非常简单的链接表,代表模块和导师

    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 :(得分:0)

您不必使用嵌套选择,只需加入两个表:

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

如果您有ContentProvider,则不必公开实际的表结构等,因此您可以相对自由地更改底层数据库。使用更简单,最有效的方法。