官方教程: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 条评论

发表回复

您的电子邮箱地址不会被公开。