sql >> Database teknologi >  >> RDS >> SQLite

Sådan filtrerer du i et til mange forhold med android room db

Lad os se på hvordan @Relation arbejder. Der er to trin:

  1. Room udfører forespørgsel, du har indsat i @Query at få brugere. Som sædvanlig inkluderer denne forespørgsel ikke nogen tilslutninger. Denne forespørgsel bruges til at hente den del af data, der er fastholdt i hovedtabellen (User i dit tilfælde).
  2. Rum udfører endnu en forespørgsel. Til det ser den på @Relation parametre og forstår, hvilken tabel den skal forespørge efter (Record i dit tilfælde) og hvad der skal være join-condition med brugerens resultat. Det er vigtigt, at du ikke har nogen mulighed for at trænge ind i denne forespørgselsproces. Du kan ikke indstille filter på Record 's felter f.eks. Få resultat Room transformerer det i det nødvendige format (udfylder Liste over Records ).

Du har valgmuligheder:

  1. At vende om i forhold til at indstille filtre på Records tabel (men med det får du flade data uden List).
public class UserWithRecords {
    @Embedded
    protected Record record;
    @Relation(
            parentColumn = "user_id",
            entity = User.class,
            entityColumn = "id"
    )
    protected User user;
}

og for at ændre forespørgsel til:

@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
  1. Du må ikke bruge @Relation overhovedet, skriv en forespørgsel med Joins, som du har prøvet. Men så skal du manuelt transformere resultatet til den nødvendige form i kode (løkkeresultat og danne liste).



  1. fejl, streng eller binære data vil blive afkortet, når du forsøger at indsætte

  2. Sådan genereres et tilfældigt tal inden for et specificeret område i SQLite

  3. hvordan man tilføjer anden i oracle tidsstempel

  4. Find Weblogic Server Version/Patches i EBS R12.2/ Standalone Weblogic