Как создать представление sqlite для использования с Room? - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь перенести свою базу данных на Android Room Architecture. Однако у меня есть некоторые сложные представления sqlite в моем приложении. Я не вижу никакой информации или документации о том, как создать представление с комнатой. Кто-нибудь может дать мне примеры или указать учебные пособия?

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

На данный момент существует открытый выпуск в Android Room для поддержки представлений базы данных в состоянии Fixed, возможно, ожидание того, что создатели поддержат его, будет хорошим вызовом.

хотя, используя хакерский метод, вы можете сделать это:

Вы можете создать @Entity, похожий на ваше представление (в столбцах), а затем onCreate базы данных удалить таблицу, сгенерированную для этого объекта.

Room
    .databaseBuilder(context, DueDatabase.class, DB_NAME)
    .addCallback(new RoomDatabase.Callback() {
       @Override
       public void onCreate(@NonNull SupportSQLiteDatabase db) {
          super.onCreate(db);
          //Drop the fake table and create a view with the same name
          db.execSQL("DROP TABLE view_name");
          db.execSQL("CREATE VIEW view_name " +
                     "AS SELECT [...]"
          );
       }
    })
    .build();

этот способ позволит вам использовать имя представления в запросах и правильно отобразить полученные данные в вашем классе @Entity, хотя вы должны помнить, что этот подход нарушит миграцию.чтобы миграция работала, вам нужно найти обходной путь (возможно, вам придется отказаться от просмотра и воссоздать поддельную таблицу)

0 голосов
/ 30 ноября 2018

Вы можете использовать androidx.room.DatabaseView аннотацию

Пример из документации:

   @DatabaseView("SELECT id, last_name FROM User")
   public class UserSummary {
       public long id;
        @ColumnInfo(name = "last_name")
       public String lastName;
   }
0 голосов
/ 11 мая 2018

Представление в sql - это просто живой запрос на обновление. Используя LiveData, вы можете получать обновления в реальном времени и просто создавать новую сущность, которая будет использоваться специально для вашего представления. Этот класс будет содержать все данные, которые будут отображаться в вашем представлении. Затем в вашей сущности DAO вы вставляете свой SQL-запрос, связанный с представлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...