Проблема переноса базы данных номеров с уникальным индексом - PullRequest
0 голосов
/ 01 марта 2019

Я пытался обновить версию своей базы данных, и в последней версии таблица имела уникальный индекс, созданный после перенастройки, выдал следующую ошибку

Ожидается:

TableInfo{name='ALERT_STATUS', columns={resolution_time=Column{name='resolution_time', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, status=Column{name='status', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1}, event_time=Column{name='event_time', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0}, is_uploaded=Column{name='is_uploaded', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, InvErrorCode=Column{name='InvErrorCode', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, is_fault=Column{name='is_fault', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, FaultDetails=Column{name='FaultDetails', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, code=Column{name='code', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0}, component=Column{name='component', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[Index{name='index_ALERT_STATUS_code_event_time', unique=true, columns=[code, event_time]}]}

Найдено:

TableInfo{name='ALERT_STATUS', columns={resolution_time=Column{name='resolution_time', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, status=Column{name='status', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1}, event_time=Column{name='event_time', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0}, is_uploaded=Column{name='is_uploaded', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, InvErrorCode=Column{name='InvErrorCode', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, is_fault=Column{name='is_fault', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, FaultDetails=Column{name='FaultDetails', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, code=Column{name='code', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0}, component=Column{name='component', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[Index{name='code_time', unique=true, columns=[code, event_time]}]}

Я попытался удалить уникальный индекс, и миграция работала нормально, но с уникальным индексом он никогда не проходил

Моя база данных Объект ниже

    @Entity(tableName = "ALERT_STATUS" , indices = {@Index(value = {"code", "event_time"},
    unique = true)})

  public class AlertStatus implements Serializable{
    @PrimaryKey(autoGenerate = true)
    public Integer id;

    @NonNull
    public String event_time;
    public String resolution_time;

    @NonNull
    public String code;
    public Integer component;
    public int status;
    public int is_fault;
    public String FaultDetails;
    public String InvErrorCode;
    public int is_uploaded;



    }

1 Ответ

0 голосов
/ 29 марта 2019

Попробуйте, это сработало для меня.

  1. Создайте новую таблицу, то есть таблицу держателей, которая будет хранить ваши данные между структурными изменениями.

    database.execSQL("CREATE TABLE TABLE_NAME (id INTEGER, column2 varchar(25) , PRIMARY KEY(id))");
    
  2. Создать уникальный индекс по мере необходимости

    database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index name ON ALERT_STATUS1 (column1,column2)");
    
...