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

Migrando telefone fixo e celular

Na migração para a versão 6, o exemplo apresentado em aula realiza apenas a migração dos dados de telefone fixo, sendo que os dados de telefone celular são perdidos. Diante do exposto, caso não se deseje perder os dados de telefone celular do aluno, gostaria de saber se a migração abaixo seria uma possível implementação? Desde já agradeço.

private static final Migration MIGRATION_5_6 = new Migration(5, 6) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            // Criar nova tabela com as informações desejadas
            database.execSQL("CREATE TABLE IF NOT EXISTS `Aluno_novo` (" +
                    "`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                    "`nome` TEXT, " +
                    "`email` TEXT, " +
                    "`momentoDeCadastro` INTEGER)");

            // Copiar dados da tabela antiga para a nova
            database.execSQL("INSERT INTO Aluno_novo (id, nome, email, momentoDeCadastro) " +
                    "SELECT id, nome, email, momentoDeCadastro FROM Aluno");

            // Cria a tabela de Telefone
            database.execSQL("CREATE TABLE IF NOT EXISTS `Telefone` (" +
                    "`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                    "`numero` TEXT, " +
                    "`tipo` TEXT, " +
                    "`alunoId` INTEGER NOT NULL)");

            // Realiza a migração dos dados de telefone fixo e celular da tabela Aluno antiga para a tabela Telefone
            Cursor cursor = database.query("SELECT id, telefoneFixo, telefoneCelular FROM Aluno");
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    do {
                        String idAluno = cursor.getString(cursor.getColumnIndex("id"));
                        String telefoneFixo = cursor.getString(cursor.getColumnIndex("telefoneFixo"));
                        String telefoneCelular = cursor.getString(cursor.getColumnIndex("telefoneCelular"));
                        if (telefoneFixo != null) {
                            // Insere Telefone Fixo
                            database.execSQL("INSERT INTO Telefone (numero, tipo, alunoId) " +
                                    "VALUES ('" + telefoneFixo + "', '" + String.valueOf(FIXO) + "', " + idAluno + ")");
                        }
                        if (telefoneCelular != null) {
                            // Insere Telefone Celular
                            database.execSQL("INSERT INTO Telefone (numero, tipo, alunoId) " +
                                    "VALUES ('" + telefoneCelular + "', '" + String.valueOf(CELULAR) + "', " + idAluno + ")");
                        }
                    } while (cursor.moveToNext());
                }
            }

            // Remove tabela antiga
            database.execSQL("DROP TABLE Aluno");

            // Renomear a tabela nova com o nome da tabela antiga
            database.execSQL("ALTER TABLE Aluno_novo RENAME TO Aluno");
        }
    };
2 respostas

Cara, tudo bem ?

Olhando seu código faz sentido sim, mas não sei se na hora de executar isso daria bom :S

Tu chegou a rodar isso ?

solução!

Obrigado Matheus, Cheguei a rodar sim e funcionou perfeitamente como esperado. Abs.