슈라 염소 자리 :
내가 만든 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이되고 싶어요.
아모스 코리르 :
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"
);
}
};