簡體   English   中英

向實體添加新字段

[英]Adding a new field to an entity

我創建了一個director

@Entity(tableName = "director")
public class Director {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "did")
    public int id;

    @ColumnInfo(name = "full_name")
    @NonNull
    public String fullName;


    public Director(@NonNull String fullName) {
        this.fullName = fullName;
    }
}

我決定通過添加遷移方法並在類中添加一個字段來添加一個新列

@Entity(tableName = "director")
public class Director {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "did")
    public int id;

    @ColumnInfo(name = "full_name")
    @NonNull
    public String fullName;

    @ColumnInfo(name = "age")
    public int age;

    public Director(@NonNull String fullName) {
        this.fullName = fullName;
    }
}

方法

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {

        String query = "ALTER TABLE 'director' ADD COLUMN 'age' INTEGER ";

        database.execSQL(query);

    }
};

當我執行代碼時出現此錯誤

Caused by: java.lang.IllegalStateException: Migration didn't properly handle

它說它預期

age=Column{name='year', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, 

並發現

age=Column{name='year', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, 

我可以看到問題出在“notnull”部分,但如何解決這個問題? 我希望它為空。

嘗試將默認年齡值設置為 0

 static final Migration MIGRATION_1_2 = new Migration(1, 2) {

  @Override
  public void migrate(SupportSQLiteDatabase database) {
    database.execSQL(
      "ALTER TABLE 'director' ADD COLUMN 'age' INTEGER NOT NULL DEFAULT 0"
     );
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM