如何使用游标执行连接?

How do perform joins using Cursors?

在我的 Android 应用程序中,我使用 Cursors/ContentValues 来执行诸如从 Sqlite3 数据库中获取结果之类的操作,然后遍历光标/填充我的对象等。执行起来很容易基本的创建、检索、更新和删除操作。

但是,如果我想执行依赖于联接的更复杂的查询怎么办?我是否基本上必须像创建 table 查询那样预先编写连接查询,然后以某种方式在其上使用 Cursor?这里公认的做法是什么?

示例连接查询:

SELECT WIDGETS.*
FROM WIDGETS INNER JOIN WIDGET_CATEGORIES 
ON WIDGETS.CATEGORY_ID = WIDGET_CATEGORIES.ID
WHERE WIDGET_CATEGORIES.ACCOUNT_ID=5;

给定您的示例查询并且 WIDGET_CATEGORIES.ACCOUNT_ID 是唯一会在您的查询中更改的变量,那么您可以使用 rawQuery(SQL statement, selectionArguments):

db.rawQuery("SELECT " + WIDGETS.* + 
" FROM " + TABLE_WIDGETS + " INNER JOIN " + WIDGET_CATEGORIES +
" ON " + WIDGETS.CATEGORY_ID + " = " + WIDGET_CATEGORIES.ID +
" WHERE " + WIDGET_CATEGORIES.ACCOUNT_ID + " = ?;", new String[]{"5"});

这将 return cursor 包含您正在寻找的预期 join 信息。