Android room Migration didn‘t properly handle

room迁移报错

原来数据库中有一张表,又新建一张表,然后room迁移报错

Android room Migration didn’t properly handle:Expected TableInfo columns={不是空} Found TableInfo columns={空}

一开始这里我没写修改内容会报上面的错

static final Migration MIGRATION_3_4 = new Migration(3, 4) {

        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
        }
};

这里需要写上创建表的SQL语句

注意

主键配置 PRIMARY KEY NOT NULL

INTEGER 字段 需要加上 NOT NULL DEFAULT 0

static final Migration MIGRATION_3_4 = new Migration(3, 4) {

        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("CREATE TABLE IF NOT EXISTS record (articleId TEXT PRIMARY KEY NOT NULL,time INTEGER NOT NULL DEFAULT 0)");
        }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,关于Android中使用Room数据库迁移(Migration)的问题,我可以给你一些简单的解释和示例。 在Android中,Room是一个SQLite数据库对象映射库,它提供了一种简单的方法来处理SQLite数据库。当你需要修改数据库结构时,你需要使用Room数据库迁移(Migration)来保持数据的完整性。 下面是一个简单的Room数据库迁移(Migration)的示例: 首先,定义一个新的实体类,例如: ``` @Entity(tableName = "users") public class User { @PrimaryKey public int id; @ColumnInfo(name = "user_name") public String name; public String email; } ``` 然后,在你的数据库类中,添加一个新的版本和对应的迁移代码,例如: ``` @Database(entities = {User.class}, version = 2) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); // Add migration code here static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE users ADD COLUMN last_name TEXT"); } }; } ``` 在上面的代码中,我们定义了一个新的版本2,并添加了一个新的实体类User,同时定义了一个名为MIGRATION_1_2的迁移对象。迁移对象中重写了migrate()方法,在该方法中执行了数据库的修改操作,例如添加了一个新的last_name列。 最后,在你的应用程序中,使用以下代码创建或打开数据库: ``` AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name") .addMigrations(AppDatabase.MIGRATION_1_2) .build(); ``` 在上面的代码中,我们使用addMigrations()方法将MIGRATION_1_2迁移对象添加到数据库的创建中。 通过以上步骤,你就可以使用Room数据库迁移(Migration)来修改数据库结构,同时保持数据的完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值