如何使用游标执行连接?
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
信息。
在我的 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
信息。