2016-06-08 61 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信息。