在我的Android应用程序中,我使用Cursors / ContentValues来执行诸如从Sqlite3数据库获取结果,然后迭代光标/填充我的对象/等等。这很容易执行基本的创建,检索,更新和删除操作。
但是如果我想执行一个依赖于连接的更复杂的查询呢?我是否基本上必须像创建表查询一样预先编写连接查询,然后以某种方式使用Cursor?这里接受的做法是什么?
示例连接查询:
SELECT WIDGETS.*
FROM WIDGETS INNER JOIN WIDGET_CATEGORIES
ON WIDGETS.CATEGORY_ID = WIDGET_CATEGORIES.ID
WHERE WIDGET_CATEGORIES.ACCOUNT_ID=5;
答案 0 :(得分:1)
鉴于您的样本查询& 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"});
这将返回cursor
,其中包含您要查找的预期join
信息。