Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Banco não atualiza

O banco de dados parece não está atualizando para versões mais nova, coloquei os Logs para identificar qual SQL tava criando, e só a primeira tabela do onCreate está sendo criada, as outras do onUpgrade não estão sendo atualizadas, e nada aparece no logcat, somente a primeira tabela.

public class AlunoDAO extends SQLiteOpenHelper {
    public AlunoDAO(Context context) {
        super(context, "Agenda", null, 4);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, " +
                "nome TEXT NOT NULL, " +
                "endereco TEXT, " +
                "telefone TEXT, " +
                "site TEXT, " +
                "nota REAL, " +
                "caminhoFoto TEXT);";

        try{

            db.execSQL(sql);
            Log.i("DBInfo", "Primeira tabela criada com sucesso");

        }catch (Exception e){
            Log.i("DBInfo", "erro ao criar primeira tabela");
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "";
        switch (oldVersion) {

            case 1:
                    String sql2 = "ALTER TABLE Alunos ADD COLUMN caminhoFoto TEXT";
                try{

                    db.execSQL(sql2);// indo para versao 2
                    Log.i("DBInfo", "Primeira alteracao com sucesso");

                }catch (Exception e){
                    Log.i("DBInfo", "erro na primeira alteracao");
                }


            case 2:
                   String criandoTabelaNova = "CREATE TABLE Alunos_novo " +
                           "(id CHAR(36) PRIMARY KEY, " +
                           "nome TEXT NOT NULL, " +
                           "endereco TEXT, " +
                           "telefone TEXT, " +
                           "site TEXT, " +
                           "nota REAL, " +
                           "caminhoFoto TEXT);";

                   try{

                       db.execSQL(criandoTabelaNova); // indo para versao 3
                       Log.i("DBInfo1", "Nova Tabela Criada com Sucesso");

                   }catch (Exception e){
                       Log.i("DBInfo1", "Erro ao criar nova Tabela");
                   }


                   //*****transferindo alunos da tabela antiga para tabela nova*****
                   String inserindoAlunosNaTabelaNova = "INSERT INTO Alunos_novo" +
                           "(id, nome, endereco, telefone, site, nota, caminhoFoto)" +
                           "SELECT id, nome, endereco, telefone, site, nota, caminhoFoto " +
                           "FROM Alunos" ;
                try{

                    db.execSQL(inserindoAlunosNaTabelaNova);
                    Log.i("DBInfo2", "Inserido na nova tabela com sucesoo");

                }catch (Exception e){
                    Log.i("DBInfo2", "Erro na transferencia de tabela");
                }

                //*****Removendo tabela antiga*****
                   String removendoTabelaAntiga = "DROP TABLE Alunos";
                   try {

                       db.execSQL(removendoTabelaAntiga);
                       Log.i("DBInfo3", "Sucesso ao Excluir tabela antiga");
                   }catch (Exception e){

                       Log.i("DBInfo3", "Erro ao remover tabela antiga");
                   }
                ////*****Alterando nome da Tabela nova*****
                   String alterandoNomeDaTabelaNova = "ALTER TABLE Alunos_novo " +
                           "RENAME TO Alunos";
                try {

                    db.execSQL(alterandoNomeDaTabelaNova);
                    Log.i("DBInfo4", "Sucesso ao alterar nome da tabela nova");
                }catch (Exception e){

                    Log.i("DBInfo4", "Erro ao alterar o nome da tabela nova");
                }


               case 3:

                   String buscaAlunos = "SELECT * FROM Alunos";
                   Cursor cursor = db.rawQuery(buscaAlunos, null);

                   List<Aluno> alunos = populaAlunos(cursor);

                   String atualizaIdDoaluno = "UPDATE Alunos SET id=? WHERE id=?";

                   for (Aluno aluno: alunos){

                       db.execSQL(atualizaIdDoaluno, new String[] {geraUUID(), aluno.getId()});
                   }
        }

    }
1 resposta
solução!

Oi Guilherme, tudo bem?

É importante lembrar que o onUpgrade() só é executado quando a versão é modificada, ou seja, quando você modifica da 1 para 2 da 2 para 3 e assim por diante.

Caso você tenha apagado a App ou limpado os dados da mesma, apenas o onCreate() será executado. É exatamente por esse motivo que quando modificamos a tabela durante a migration essa mudança precisa ser replicada no onCreate() também.

[]s