SQLite
 sql >> база данни >  >> RDS >> SQLite

Как да филтрирате във връзка едно към много с android room db

Нека да разгледаме как @Relation върши работа. Има два етапа:

  1. Room изпълнява заявка, която сте поставили в @Query за да получите потребители. Както обикновено, тази заявка не включва никакви присъединявания. Тази заявка се използва за получаване на тази част от данните, които се съхраняват в основната таблица (User във вашия случай).
  2. Стаята изпълнява още една заявка. За това той разглежда @Relation параметри и разбира коя таблица трябва да потърси следващата (Record във вашия случай) и какво трябва да бъде условие за присъединяване с резултата на потребителя. Важно е да нямате начин да се намесвате в този процес на създаване на заявки. Не можете да зададете филтър на Record полета на 's, например. Получаване на резултат Стаята го преобразува в необходимия формат (попълва Списък с Records ).

Имате избор:

  1. За да обърнете отношение към задаване на филтри на Records таблица (но с това ще получите плоски данни без списък).
public class UserWithRecords {
    @Embedded
    protected Record record;
    @Relation(
            parentColumn = "user_id",
            entity = User.class,
            entityColumn = "id"
    )
    protected User user;
}

и да промените заявката на:

@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
  1. Да не се използва @Relation изобщо, напишете заявка с Joins, както сте опитвали. Но след това трябва ръчно да трансформирате резултата в необходимата форма в кода (завъртане на резултата и формиране на списък).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина за изтриване на дублиращи се редове в SQLite

  2. Включване на низове в единични кавички в резултатите от заявка на SQLite

  3. SQLiteException:неизвестна база данни

  4. Използване на SQLCipher с Android

  5. близо до грешка в synatx (код 1) вмъкнете Android SQLite