Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não deu certo a Migration

Meu DataBase

@Database(entities = {Aluno.class}, version = 2, exportSchema = false)
public abstract class AgendaDatabase extends RoomDatabase {

    private static final String NOME_BANCO_DADOS = "agenda.db";

    public abstract AlunoDAO getRoomAlunoDAO();

    public static AgendaDatabase getInstance(Context context) {
        return Room.databaseBuilder(context, AgendaDatabase.class, NOME_BANCO_DADOS)
                .allowMainThreadQueries()
                .addMigrations(new Migration(1,2) {
                    @Override
                    public void migrate(@NonNull SupportSQLiteDatabase supportSQLiteDatabase) {
                        supportSQLiteDatabase.execSQL("ALTER TABLE aluno ADD COLUMN sobrenome TEXT");
                    }
                })
                .build();
    }
}

Minha entidade

@Entity
public class Aluno implements Serializable {
    @PrimaryKey(autoGenerate = true)
    private int id = 0;
    private String sobremone;
    private String nome;
    private String telefone;
    private String email;
    

    @Ignore
    public Aluno(String nome,String sobremone, String telefone, String email) {
        this.nome = nome;
        this.sobremone = sobremone;
        this.telefone = telefone;
        this.email = email;
    }

    public Aluno() {

    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSobremone() {
        return sobremone;
    }

    public void setSobremone(String sobremone) {
        this.sobremone = sobremone;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @NonNull
    @Override
    public String toString() {
        return nome;
    }

    public boolean temIdValido() {
        return id>0;
    }
}

Ao tentar implementar a migration 1 para 2 tenho o erro:

FATAL EXCEPTION: main Process: xavier.f, PID: 15667 java.lang.RuntimeException: Unable to resume activity {xavier.f/xavier.f.ui.activity.ListaAlunosActivity}: java.lang.IllegalStateException: Migration didn't properly handle: Aluno(xavier.f.model.Aluno). Expected: TableInfo{name='Aluno', columns={nome=Column{name='nome', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, telefone=Column{name='telefone', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='undefined'}, email=Column{name='email', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, sobremone=Column{name='sobremone', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}}, foreignKeys=[], indices=[]} Found: TableInfo{name='Aluno', columns={id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='undefined'}, nome=Column{name='nome', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, telefone=Column{name='telefone', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, email=Column{name='email', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, sobrenome=Column{name='sobrenome', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}}, foreignKeys=[], indices=[]}

Alguma idéia de onde errei?

3 respostas
solução!

Olá, Fernando!

Pelo erro que você está recebendo, parece que a migration não está sendo aplicada corretamente. O erro indica que a estrutura atual da tabela "Aluno" não corresponde à estrutura esperada pela migration.

Ao analisar seu código, notei um pequeno erro de digitação na classe "Aluno". Na declaração do atributo "sobremone", você digitou errado, deveria ser "sobrenome". Esse erro de digitação está causando a diferença na estrutura da tabela.

Para corrigir o problema, basta corrigir a declaração do atributo "sobremone" para "sobrenome" na classe "Aluno". Ficaria assim:

private String sobrenome;

Após fazer essa correção, tente executar novamente a migration e veja se o erro persiste.

Espero que isso resolva o seu problema! Se tiver mais alguma dúvida, é só me dizer. Espero ter ajudado e bons estudos!

bahhhhhhhh que blz

kkk

quem nunca ? kk

obrigado . Vou verificar

Renan Lima,

Deu certo. Eu nunca ia ver isso aí kk . Obrigado