gpt4 book ai didi

android - 如何在 Android Room Persistence Library 中创建没有迁移版本的表?

转载 作者:行者123 更新时间:2023-11-29 18:48:59 24 4
gpt4 key购买 nike

只创建一个表,不改变其他表和数据,是否需要迁移数据库?

作为google tutorial google了一下,大部分说我们必须迁移数据库,如果我每次升级都创建表,我必须增加数据库版本和迁移,这很困惑

最佳答案

是的,是的。 Room 一开始就比较数据库模式,如果模式不同,它将运行迁移。如果架构不同并且不会添加迁移,则可能会抛出 IllegalStateException。

更重要的是,当您提高数据库版本并且您没有更改模式时,您应该将迁移对象添加到构建器中。如果不是,Room 将清除您的数据库并重新创建它们。您可以在 RoomDatabase.java 类的文档中阅读更多内容:

  /**
* Adds a migration to the builder.
* <p>
* Each Migration has a start and end versions and Room runs these migrations to bring the
* database to the latest version.
* <p>
* If a migration item is missing between current version and the latest version, Room
* will clear the database and recreate so even if you have no changes between 2 versions,
* you should still provide a Migration object to the builder.
* <p>
* A migration can handle more than 1 version (e.g. if you have a faster path to choose when
* going version 3 to 5 without going to version 4). If Room opens a database at version
* 3 and latest version is &gt;= 5, Room will use the migration object that can migrate from
* 3 to 5 instead of 3 to 4 and 4 to 5.
*
* @param migrations The migration object that can modify the database and to the necessary
* changes.
* @return this
*/
@NonNull
public Builder<T> addMigrations(Migration... migrations) {
mMigrationContainer.addMigrations(migrations);
return this;
}

/**
* Allows Room to destructively recreate database tables if {@link Migration}s that would
* migrate old database schemas to the latest schema version are not found.
* <p>
* When the database version on the device does not match the latest schema version, Room
* runs necessary {@link Migration}s on the database.
* <p>
* If it cannot find the set of {@link Migration}s that will bring the database to the
* current version, it will throw an {@link IllegalStateException}.
* <p>
* You can call this method to change this behavior to re-create the database instead of
* crashing.
* <p>
* Note that this will delete all of the data in the database tables managed by Room.
*
* @return this
*/
@NonNull
public Builder<T> fallbackToDestructiveMigration() {
mRequireMigration = false;
return this;
}

关于android - 如何在 Android Room Persistence Library 中创建没有迁移版本的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51258454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com