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");
}
};