官方教程:https://developer.android.com/training/data-storage/room
特性:与RxJava结合,实时刷新。
原理:https://blog.51cto.com/u_15200109/2786116
获取数据库文件的位置
String currentDBPath=getDatabasePath("photex_db.db").getAbsolutePath();
在Android11上打印的位置是/data/user/10/包名/databases/photex_db.db
数据库升级
1.首先新建实体类entity
@Entity(tableName = "animal")
public class Animal {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
public int id;
@Override
public String toString() {
return "Animal{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@ColumnInfo(name="name",typeAffinity = ColumnInfo.TEXT)
public String name;
}
2.将表名加入userDataBase, 并升级数据库的版本
@Database(entities = {User.class,Score.class,Animal.class},version = 2,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
public static final String DB_NAME = "UserDataBase.db";
private static volatile UserDatabase instance;
3.修改Migration
/**
* 升级数据库
*/
static final Migration MIGRATION_1_2=new Migration(1,2) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("ALTER TABLE user ADD COLUMN subject INTEGER NOT NULL DEFAULT 1");
database.execSQL("CREATE TABLE animal(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT)");
}
};
4.添加Migration
private static UserDatabase createDatabase(Context context) {
return Room.databaseBuilder(context,UserDatabase.class,DB_NAME).allowMainThreadQueries().addCallback(new RoomDatabase.Callback(){
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
}
}).addMigrations(MIGRATION_1_2).build();
}
0 条评论