Библиотека комнат Android Миграция изменила тип предыдущего столбца - PullRequest
0 голосов
/ 07 сентября 2018

Я использую библиотеку комнаты для обработки части базы данных в моем приложении для Android. Я хочу перейти с моей версии базы данных с 3 на 4. Я добавил две новые колонки в мою таблицу во время миграции. Но во время миграции тип столбца date_time изменяется с TEXT на DATETIME. Я получаю следующее исключение.

 java.lang.IllegalStateException: Migration didn't properly handle table_transactions(com.example.braintech.demosmspickerapp.database.TransactionModel).
    Expected:
    TableInfo{name='table_transactions', columns={entry_type=Column{name='entry_type', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, dg=Column{name='dg', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, balance=Column{name='balance', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1}, date=Column{name='date', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, date_time=Column{name='date_time', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, reading_grid=Column{name='reading_grid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, note=Column{name='note', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}
    Found:
    TableInfo{name='table_transactions', columns={entry_type=Column{name='entry_type', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, dg=Column{name='dg', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, balance=Column{name='balance', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1}, date=Column{name='date', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, date_time=Column{name='date_time', type='DATETIME', affinity='1', notNull=false, primaryKeyPosition=0}, reading_grid=Column{name='reading_grid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, note=Column{name='note', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

Entity

@Entity(tableName = AppConstants.TABLE_TRANSACTIONS)
public class TransactionModel implements Serializable {


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

    @ColumnInfo(name = "date")
    public String date;

    @ColumnInfo(name = "balance")
    public String balance;

    @ColumnInfo(name = "reading_grid")
    public String reading_grid;

    @ColumnInfo(name = "dg")
    public String dg;

    @ColumnInfo(name = "date_time")
    public String date_time;

    @ColumnInfo(name = "note")
    public String note;

    @ColumnInfo(name = "entry_type")
    public String entry_type;

    @Ignore
    Date dateForCompare;
}

Миграционный код

static final Migration MIGRATION_3_4 = new Migration(3, 4) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {


        database.execSQL("ALTER TABLE '" + AppConstants.TABLE_TRANSACTIONS + "' ADD COLUMN 'note' TEXT ");
        database.execSQL("ALTER TABLE '" + AppConstants.TABLE_TRANSACTIONS + "' ADD COLUMN 'entry_type' TEXT ");
        Log.d("VROM", "Migration");
    }
};

1 Ответ

0 голосов
/ 07 сентября 2018

В вашем исключении я видел различия, первое из них:

Expected: id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1}

Found: id=Column{name='id', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1}

Изменено с notNull=true на notNull=false

а второй:

Expected: date_time=Column{name='date_time', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}

Found: date_time=Column{name='date_time', type='DATETIME', affinity='1', notNull=false, primaryKeyPosition=0}

Изменено с type='TEXT', affinity='2' на type='DATETIME', affinity='1'

Итак, не могли бы вы попытаться добавить аннотацию @NonNull к первичным ключам и попробовать выполнить миграцию снова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...