Android SQLite Upgrade bez utraty danych

Udało mi się utworzyć bazę danych SQLite i działa ona poprawnie. Jednak po wywołaniu metody onUpgrade chciałbym to zrobić bez utraty danych. Aplikacja, którą tworzę, to aplikacja quizowa. Po prostu, gdy wywoływana jest metoda onCreate, tworzę i przygotowuję bazę danych z pytaniami, odpowiedziami itp. Ostatnia kolumna dotyczy tego, czy ustawili pytanie jako ulubione, czy nie. Chciałbym tylko, aby po wywołaniu metody onUpgrade tymczasowo zapisać tę jedną kolumnę, upuścić całą bazę danych, odtworzyć ją z dowolnymi zmianami, które wprowadziłem do starych pytań i dodać nowe pytania, a następnie ponownie -dodaj pytania, które ustawili jako ulubione.

Więc jedną z opcji, które wypróbowałem, było:

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

Jednak to nie działa, ponieważ INSERT INTO dodaje nowe wiersze zamiast zastępować istniejące wiersze. Próbowałem także WYMIENIĆ DO, WSTAWIĆ LUB WYMIENIĆ DO i

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

z których żaden nie działa.

Obecnie mam skonfigurowane do pracy, zmieniając nazwę tabeli, wywołując metodę onCreate (db), a następnie ustawiając kursor, który odczytuje każdy wiersz i używa metody db.update (), jak pokazano poniżej:

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

}

Jednak mimo że działa, jest bardzo powolny i będzie się pogarszał wraz ze wzrostem liczby pytań. Czy jest szybki sposób, aby to wszystko zrobić?

Dziękuję Ci! P.S. Najlepiej zaktualizować wiersz tylko wtedy, gdy wiersz jest obecny. Jeśli więc w aktualizacji zdecyduję się usunąć pytanie, powinno to wziąć pod uwagę i nie dodawać nowego wiersza, jeśli wiersz nie zawiera żadnych innych danych. Łatwiej będzie go usunąć, aby nie zawierały danych pytań, zamiast zapobiegać ich dodawaniu.

questionAnswers(6)

yourAnswerToTheQuestion