Atualização do Android SQLite sem perder dados

Eu criei um banco de dados SQLite com sucesso e funciona bem. No entanto, quando o método onUpgrade é chamado, gostaria de fazê-lo sem perder dados. O aplicativo que estou desenvolvendo é um aplicativo de teste. Simplesmente, quando o método onCreate é chamado, eu crio e pre povo um banco de dados com perguntas, respostas, etc. A última coluna é se eles definiram a pergunta como favorita ou não. O que eu gostaria de fazer é que, quando o método onUpgrade for chamado, eu gostaria de salvar temporariamente essa coluna, soltar todo o banco de dados, recriá-lo com qualquer edição que eu tenha feito para perguntas antigas e adicionar novas perguntas. -Adicione as perguntas que eles definem como favoritos.

Então, uma opção que tentei foi a seguinte:

db.execSQL("ALTER TABLE quiz RENAME TO temp_quiz");
onCreate(db);
db.execSQL("INSERT INTO quiz (favouries) SELECT favourites FROM temp_quiz");
db.execSQL("DROP TABLE IF EXISTS temp_quiz");

No entanto, isso não funciona devido ao fato de INSERT INTO apenas adicionar novas linhas em vez de substituir as linhas existentes. Eu também tentei SUBSTITUIR, INSERIR OU SUBSTITUIR

db.execSQL("INSERT INTO quiz (_id, favouries) SELECT _id, favourites FROM temp_quiz");

dos quais nenhum trabalho.

Atualmente eu tenho configurado para funcionar alterando o nome da tabela, chamando o método onCreate (db) e então configurando um cursor que lê cada linha e usa o método db.update () como mostrado abaixo:

int place = 1;
int TOTAL_NUMBER_OF_ROWS = 500;

while (place < TOTAL_NUMBER_OF_ROWS) {

String[] columns = new String[] { "_id", ..........., "FAVOURITES" };
// not included all the middle columns

Cursor c = db.query("temp_quiz", columns, "_id=" + place, null, null, null, null);

c.moveToFirst(); 

String s = c.getString(10);
// gets the value from the FAVOURITES column


ContentValues values = new ContentValues(); 
values.put(KEY_FLAG, s);

String where = KEY_ROWID + "=" + place;

db.update(DATABASE_TABLE, values, where, null);

place++;

c.close();

}

No entanto, enquanto isso funciona, é extremamente lento e só vai piorar à medida que o meu número de perguntas aumenta. Existe uma maneira rápida de fazer tudo isso?

Obrigado! P.S. Idealmente, só deve atualizar a linha se a linha estiver presente. Portanto, se em uma atualização eu decidir remover uma pergunta, ela deve levar isso em conta e não adicionar uma nova linha se a linha não contiver nenhum outro dado. Pode ser mais fácil obtê-lo para remover linhas que não têm dados de pergunta, em vez de impedi-las de serem adicionadas.

questionAnswers(6)

yourAnswerToTheQuestion