Room 数据库迁移失败,预打包数据库的架构无效

问题描述

我有一个简单的 sqlite 数据库

sqllite database

对应的用户实体类如下所示:

@Entity
public class User {
  @PrimaryKey
  public int uid;

  @ColumnInfo(name = "first_name")
  public String firstName;

  @ColumnInfo(name = "last_name")
  public String lastName;

  public User(int uid,String firstName,String lastName){
      this.uid = uid;
      this.firstName = firstName;
      this.lastName = lastName;
  }
}

但是,我收到此错误

error pic

我错过了什么?列顺序错了吗? 我认为这是由于 notNull 注释未在我的实体类中设置,但即使使用注释,错误仍然存​​在。

解决方法

enter image description here

您将 NN(非空)值分配给 SQLite 中的“uid”列的问题,该问题出现在错误日志的预期部分,尽管在迁移代码(您没有显示),您没有在迁移中明确添加“NOT NULL”语句,以及在错误日志的 Found 部分中可以看到的内容.

顶部图像以绿色突出显示。

所以,应该会看到类似下面的内容,根据你的代码检查和修改:

database.execSQL("ALTER TABLE 'User' ADD COLUMN 'uid' INTEGER NOT NULL");

注意:在文本中添加错误日志比添加图像更有帮助,尽管在您的情况下这将有助于为插图着色:)