Предлагает ли Android Room альтернативу SqliteOpenHelper onCreate () и onUpdate ()? - PullRequest
0 голосов
/ 01 октября 2018

Используя SqliteOpenHelper, я могу положиться на метод onCreate () для инициализации некоторой работы с базой данных, если база данных создается в первый раз.

Кроме того, используя метод onUpdate (), я могу легко определить, есть ли у пользователя более старая версия БД, и легко ее обновить.

Поддерживает ли Room альтернативные методы использования?

Ответы [ 2 ]

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

1.SQLiteOpenHelper.onCreate

ДА, для этого есть класс обратного вызова.Вы можете добавить Обратный звонок в RoomDatabase.Builder, как это

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
    .addCallback(new Callback() {
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            super.onCreate(db);
            //do something
        }

        @Override
        public void onOpen(@NonNull SupportSQLiteDatabase db) {
            super.onOpen(db);
            //do something
        }
    })
    .build();

2.SQLiteOpenHelper.onUpdate

ДА, для этого есть класс Migration.Вы можете добавить миграцию в RoomDatabase.Builder следующим образом:

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
    .addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
                + "`name` TEXT, PRIMARY KEY(`id`))");
    }
};

static final Migration MIGRATION_2_3 = new Migration(2, 3) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE Book "
                + " ADD COLUMN pub_year INTEGER");
    }
};

Если приложение обновляет версию базы данных с версии 1 до 4.

  1. , вариант A. Если вы определили миграции для версии 1 на4.
    • Бум.комната будет вызывать только один код миграции.версии 1–4.
  2. вариант B. если вы определили миграции для версий 1–2, версий 2–3, версий 3–4.
    • комната сработаетвсе миграции по очереди.

вам следует проверить эту документацию Базы данных Migrating Room

и эту статью Понимание миграции с помощьюномер

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

Вот пример того, как выполнить миграцию схемы в Room, аналогично использованию метода onUpdate () в SqliteOpenHelper:

Room.databaseBuilder(context, RepoDatabase.class, DB_NAME)
.addMigrations(FROM_1_TO_2)
.build();

static final Migration FROM_1_TO_2 = new Migration(1, 2) {
    @Override
    public void migrate(final SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE Repo 
                         ADD COLUMN createdAt TEXT");
        }
    };

Дополнительная информация Здесь

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