2011-12-11 76 views
0

多个表我有代表模块和导师什么是查询android中

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); 

然后,这个光标包含了所有的是模块记录,其中这个特殊的导师就是导师一个非常简单的链接表的首选方式,我想要的是获取存储在不同表中的所有模块细节。

什么是检索这些的最佳方式,我是否使用游标中的值在循环中构造一个非常长的原始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中实现这一点 - 一旦我的数据库在内部为我的应用程序工作,我打算通过Content Provider公开它,所以游标解决方案再次似乎更可取,因为我认为它稍微接近我将如何最终最终在我的应用程序中使用数据库。

回答

0

您没有使用嵌套的选择,只是加入了两个表:

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

如果你有一个ContentProvider的,你不必暴露实际表结构等,因此你应该相对自由地对底层数据库进行更改。使用更简单,最有效的方法。

+0

我的理解是一个内容提供者返回一个游标,所以我希望代码实现一个游标,这样我就可以在我实现内容提供者后将游标分配到哪里。 – Luke

+1

是的,但你返回的光标不一定是你从底层数据库获得的光标。这是实现它的最直接和最常用的方式。 –