前言
在平时的开发时,数据库的升级并不总是按部就班的从 version: 1->2,2->3,3->4
。总是会出现 version:1->3,或 2->4
的情况。这时候我们又该怎么办呢?
方法很简单。当用户升级 APP 时,我们替用户升级数据库版本。
具体做法:version:1->2
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
//do something
}
};
version:2->3
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE student "
+ " ADD COLUMN phone_num TEXT");
}
};
把migration 添加到 Room database builder:
database = Room.databaseBuilder(context.getApplicationContext(),
StudentDatabase.class, "Demo.db")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.build();
复杂表操作:
字段类型修改
version:3->4
static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
//创建表
database.execSQL(
"CREATE TABLE student_new (student_id TEXT, student_name TEXT, phone_num INTEGER, PRIMARY KEY(student_id))");
//复制表
database.execSQL(
"INSERT INTO student_new (student_id, student_name, phone_num) SELECT student_id, student_name, phone_num FROM student");
//删除表
database.execSQL("DROP TABLE student");
//修改表名称
database.execSQL("ALTER TABLE student_new RENAME TO students");
}
};
多版本迁移
要是用户刚下载的 APP,想升级到版本最新版本呢?目前我们定义了
migrations:version 1 到 2, version 2 到 3, version 3 到 4
, 所以 Room 会一个接一个的触发所有migration
。其实 Room 可以处理大于 1 的版本增量:我们可以一次性定义一个从
1 到4 的 migration
,提升迁移的速度。
static final Migration MIGRATION_1_4 = new Migration(1, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
//创建表
database.execSQL(
"CREATE TABLE student_new (student_id TEXT, student_name TEXT, phone_num INTEGER, PRIMARY KEY(student_id))");
//复制表
database.execSQL(
"INSERT INTO student_new (student_id, student_name, phone_num) SELECT student_id, student_name, phone_num FROM student");
//删除表
database.execSQL("DROP TABLE student");
//修改表名称
database.execSQL("ALTER TABLE student_new RENAME TO students");
}
};
接着,我们只需把它添加到 migration
列表中:
database = Room.databaseBuilder(context.getApplicationContext(),
StudentDatabase.class, "Demo.db")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_1_4)
.build();
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/21335,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/21335,转载请注明出处。
评论0