Android SQLite Обновление без потери данных

Я успешно создал базу данных SQLite, и она отлично работает. Однако когда вызывается метод onUpgrade, я бы хотел сделать это без потери данных. Приложение, которое я разрабатываю, является приложением викторины. Проще говоря, когда вызывается метод onCreate, я создаю и заранее заполняю базу данных вопросами, ответами и т. Д. В последнем столбце указано, установили ли они вопрос в качестве избранного или нет. Я хотел бы, чтобы при вызове метода onUpgrade я хотел бы временно сохранить один столбец, удалить всю базу данных, воссоздать его с любыми изменениями, внесенными мной в старые вопросы, и добавить все новые вопросы, а затем повторно -Добавить вопросы, которые они задали в качестве избранных.

Итак, я попробовал один вариант:

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

Однако это не работает из-за того, что INSERT INTO просто добавляет новые строки, а не заменяет существующие. Я также попытался заменить, вставить или заменить на и

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

из которых никто не работает.

В настоящее время я настроил его на работу, изменив имя таблицы, вызвав метод onCreate (db), а затем установив курсор, который читает каждую строку и использует метод db.update (), как показано ниже:

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();

}

Однако, хотя это работает, это очень медленно и будет только ухудшаться, поскольку мое количество вопросов увеличивается. Есть ли быстрый способ сделать все это?

Спасибо! Постскриптум В идеале он должен обновлять только строку, если она есть. Поэтому, если в обновлении я решу удалить вопрос, он должен принять это во внимание и не добавлять новую строку, если строка не содержит никаких других данных. Возможно, будет проще заставить его удалить строки, в которых нет данных вопросов, а не предотвратить их добавление.