Room数据库升级

  • 首先在继承RoomBase的类当中,定义Migration
    •   
          static Migration migration = new Migration(1,2) {
              @Override
              public void migrate(@NonNull SupportSQLiteDatabase database) {
                  database.execSQL("alter table student_table ADD  COLUMN begin_time INTEGER NOT NULL DEFAULT 0");
              }
          };

       

  • RooDataBase().addMigrations(migration).build
    •   
      Room.databaseBuilder(mContext.getApplicationContext(),WorkRoomDataBase.class,"work_database")
                                  .addMigrations(ALL_MIGRATIONS)
              ....

       

  • 注意,定义INTEGER字段的时候  需要加NOT NULL DEFAULT 0,否则汇报错(IlegalStateException)
  • SQLite 存储类

    每个存储在 SQLite 数据库中的值都具有以下存储类之一:

    存储类描述
    NULL 值是一个 NULL 值。
    INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
    REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
    TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
    BLOB 值是一个 blob 数据,完全根据它的输入存储。

    SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。

posted on 2019-11-28 16:05  endian11  阅读(1588)  评论(0编辑  收藏  举报

导航