在我們平時(shí)使用room數(shù)據(jù)庫版本升級(jí)的時(shí)候,對(duì)表字段的改動(dòng)需要自己寫sql語句來升級(jí) (如圖1)糕篇,在room的新版本中泳桦,我們可通過配置,讓其自動(dòng)升級(jí)并保留數(shù)據(jù)娩缰。
圖1
1.引入room的依賴
def room_version = "2.5.0-alpha01"http://2.2.5
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
2.設(shè)置room數(shù)據(jù)庫生成表的sql語句灸撰,這一步非常重要
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}
}
3.基本的配置好了以后我們就可以正常的來增加注解來配置數(shù)據(jù)的庫的自動(dòng)升級(jí)了
@Database(entities = {UserBean.class, SchoolsBean.class},
exportSchema = true,
version = 8,
autoMigrations = {
@AutoMigration(from = 4, to = 5),//數(shù)據(jù)庫升級(jí)版本注解
@AutoMigration(from = 5, to = 6),
@AutoMigration(from = 6, to = 7),
@AutoMigration(from = 7, to = 8),
}
)
public abstract class MainDatabase extends RoomDatabase {
4.如果需要在表里新增一個(gè)字段如test字段,只需要增加一個(gè)@ColumnInfo注解拼坎,并為其賦一個(gè)默認(rèn)值
@Entity(tableName = "t_user")
public class UserBean {
@PrimaryKey(autoGenerate = true)
private long _id;
private String name;
private int age;
private String info;
@ColumnInfo(defaultValue = "0")
private int test;
.....
}
配置完成后浮毯,我們的項(xiàng)目中會(huì)存在多個(gè)json文件,這個(gè)是本地?cái)?shù)據(jù)庫各個(gè)版本的sql語句泰鸡,請(qǐng)注意债蓝,這些json文件需要保存不能刪除,否則下次升級(jí)會(huì)找不到上個(gè)數(shù)據(jù)庫的文件盛龄,導(dǎo)致自動(dòng)升級(jí)失敗饰迹。
image.png