修羅山羊座:
私が作成した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」の部分であるが、この問題を解決する方法を見ることができますか?私はそれがnullになりたいです。
アモスKorir:
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"
);
}
};