2016-06-08 11 views
0

In meiner Android App verwende ich Cursors/ContentValues, um Dinge wie die Ergebnisse aus der Sqlite3-Datenbank zu holen und dann über den Cursor zu iterieren/meine Objekte zu bevölkern usw. Es ist einfach genug, grundlegende Create, Retrieve, Update und Delete durchzuführen Operationen.Wie führen Sie Joins mit Cursors durch?

Aber was, wenn ich eine kompliziertere Abfrage durchführen möchte, die auf einem Join beruht? Muss ich die Join-Abfrage im Prinzip wie die Erstellungsanforderungen für die Tabelle vorschreiben, und dann irgendwie einen Cursor verwenden? Was ist die akzeptierte Praxis hier?

Probe Join-Abfrage:

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

Gibt es einen Grund, warum Sie 'db.rawQuery (sql, selectionArgs)' 'nicht verwenden können? –

+0

Sie schreiben die Abfrage mit 'Join's und allen anderen SQL-Konstrukten. Dann verwenden Sie eine Abfrage nur, wenn Sie müssen. –

+0

@DanielK Ich hatte gehört, mit RawQuery wurde als schlechte Praxis und dass ich stattdessen Cursors/ContentValues ​​/ etc verwenden sollte. –

Antwort

1

Ihre Beispielabfrage & mit WIDGET_CATEGORIES.ACCOUNT_ID die einzige Variable ist, die in der Abfrage ändern, dann können Sie rawQuery(SQL statement, selectionArguments) verwenden Gegeben:

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"}); 

Dieses eine cursor zurück mit der erwarteten join Informationen, nach denen Sie suchen.

Verwandte Themen