2016-06-08 80 views
0

在我的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

有没有理由不使用'db.rawQuery(sql,selectionArgs)'? –

+0

您使用“连接”和所有其他SQL构造编写查询。然后,只有必要时才使用查询。 –

+0

@DanielK我听说使用rawQuery被认为是不好的做法,我应该使用Cursors/ContentValues /等。 –

回答

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信息。