2013-04-18 18 views
5

Ho 3 tabelle nel mio database sqllite Due sono tabelle di configurazione e una è la tabella principale in cui sono archiviati i miei dati. ora come recuperare i dati dalla tabella principale unendo 2 tabelle in Android, come e dove eseguire le operazioni di join.Unire tabelle in Android

Qualcuno può guidarmi.

+0

http://www.w3schools.com/sql/sql_join.asp controllare questo e utilizzare tipo diverso si unisce secondo le vostre esigenze .... – SBJ

+0

Grazie per la vostra risposta SBJ in realtà sono consapevole di questi join ma non sono sicuro di come eseguire lo stesso in Android – Siva

risposta

9

puoi semplicemente eseguire un rawQuery.
Per esempio qualcosa di simile:

db.rawQuery("SELECT a.* 
FROM table_1 a 
INNER JOIN table_2 b ON a.id=b.anyId 
INNER JOIN table_3 c ON b.id= c.anyId 
WHERE c.key = ?", new String[]{"test"}); 

La prima parametro della query che si desidera eseguire. Per tutte le chiavi che desideri aggiungere alla tua query, aggiungi un ? nella query.
Il secondo parametro è una matrice di stringhe. In questo array metti le tue chiavi, come nell'esempio sopra il valore test.

EDIT:

è anche possibile utilizzare rawQuery per update, insert o delete.
Per esempio una semplice query di aggiornamento:

db.rawQuery("UPDATE table_1 
SET fieldA = ?, 
fieldB = ? 
WHERE id = ?", new String[]{"test", "test2", "1"}); 
+0

Grazie Obl Tobl ma ho imparato query raw può creare alcuni problemi c'è qualche altro modo per eseguire unire e attivare la query di selezione – Siva

+0

Puoi dirmi quali problemi hai sentito di? non ho mai avuto problemi nei miei progetti –

+0

Spesso il metodo di query non elaborato restituisce risultati errati e mi è stato consigliato di non utilizzarlo ... Se è il modo valido possiamo eseguire l'inserimento, l'aggiornamento e l'eliminazione anche con query non elaborata ... Se sì, per favore guidami. scusa per aver chiesto una domanda in qualche modo sono un novizio in Android e sto solo imparando sul palco .. Grazie – Siva

-1

È necessario rawQuery metodo per risolvere questo problema.

private final String MY_QUERY = "SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.other_id WHERE b.property_id=?"; 

db.rawQuery(MY_QUERY, new String[]{String.valueOf(propertyId)}); 

Ma se si vuole fare una buona implementazione creare uno SQLiteHelper e DataSource per ogni tavolo e fare il rapporto nell'origine dati.

+0

Grazie per la tua risposta
Sì..esattamente ... invece di questa query non elaborata, proprio come l'inserimento, c'è qualche possibilità di unire le tabelle e di utilizzare nella nostra query di selezione – Siva

0

classe DatabaseHelper estende SQLiteOpenHelper

scrittura sottostante Codice nei tuoi funcions ...

SQLiteDatabase db = this.getReadableDatabase(); 

    private final String MY_QUERY = "YOUR QUERY"; 

    db.rawQuery(MY_QUERY, new String[]{"Parameter"}); 
    db.close(); 
+0

Grazie SBJ la implementerà. – Siva

+0

in realtà copi solo la mia risposta? non è uno stile da gentiluomo ... –

+0

copio lo scopo della tua query su come usare la query ... ora ho cancellato ok .... – SBJ