Requête SQLite à partir de plusieurs tables à l'aide de SQLiteDatabase

J'ai deux tables dans ma base de données, par exemple: Table1: id (PK), data1 et Table2: id (PK), id_table1 (FK), data2 . Comment puis-je faire une requête comme ça?

 SELECT * FROM Table1, Table2 WHERE Table1.id = Table2.id_table1 GROUP BY Table1.data1 

J'utilise SQLiteDatabase et sa méthode query() .

 Cursor mCursor = db.query(true, new String[] {"Table1","Table2"}, new String[] {"Table1.id","data1", "Table2.id", "id_table1", "data2"}, "Table1.id=Table2.id_table1", null, "Table1.data1", null,null,null); 

Mais il y a un problème avec le second arg – il est seulement possible d'utiliser String, not String [] (comme new String[] {"Table1","Table2} ). Que dois-je faire pour faire une requête à partir de plusieurs tables de cette façon ?

  • Java - java.lang.IllegalStateException: Impossible de lire la ligne 0, col -1 à partir de CursorWindow
  • Besoin d'un exemple de sqlite avec Monodroid
  • GreenDAO ne génère pas de contrainte FOREIGN KEY (...) dans le tableau
  • Comment écrire un test Robolectric (2.3) à l'aide de la base de données
  • Performances ORM: greenDAO est-il plus rapide que ORMLite?
  • Maintenir un ListView où chaque élément de la liste a une relation de un à plusieurs
  • Exception SQLite: la base de données est verrouillée
  • Activité et arrière-plan Accès à la base de données SQLite
  • 2 Solutions collect form web for “Requête SQLite à partir de plusieurs tables à l'aide de SQLiteDatabase”

    Essaye ça:

     Cursor mCursor = db.rawQuery("SELECT * FROM Table1, Table2 " + "WHERE Table1.id = Table2.id_table1 " + "GROUP BY Table1.data1", null); 

    Donc, lorsque vous devez JOIN Tables, vous devez utiliser rawQuery au lieu de la query . Donc, votre déclaration

     String SELECT_QUERY = SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id GROUP BY t1.data1; 

    Je vous recommande d'utiliser JOIN parce qu'il est plus rapide et plus sûr que votre approche. Donc, votre méthode rawQuery peut ressembler à ceci:

     cursor = db.rawQuery(SELECT_QUERY, null); 

    Regardez rawQuery dans SQLiteDatabase

    Cordialement

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.