Хранение базы данных Firebase в базе данных sqlite с некоторыми неизменными свойствами - PullRequest
0 голосов
/ 26 ноября 2018

Хорошо, поэтому моя база данных приложения полностью хранится в firebase, и мое приложение обновляет свою базу данных каждый день.

Какую процедуру я использовал каждый раз при обновлении данных:

  1. Удалите текущую таблицу sqlite
  2. Создайте таблицу снова
  3. Заполните данные

Раньше это работало идеально, представьте, что строка удалена, так как я отбрасываювсю таблицу и переписать все это, удаленная строка также технически удаляется из локального sqlite, но теперь в таблице есть небольшое изменение, есть столбец, скажем «просмотренный», в котором хранятся данные о просмотре конкретной строки илине, "истина" или "ложь" (String)

Теперь, если я уроню данные во время обновления, он потеряет свойства этого столбца.Затем я подумал об использовании UPDATE в sqlite и обновлении данных столбцов каждой строки, но могут быть случаи, когда определенного столбца больше нет в базе данных firebase, но если я это сделаю, он останется в моей локальной базе данных.(Я имею в виду, что данные не редактируются, а удаляются).Так как я могу преодолеть это?

Старая таблица:

db.execSQL("CREATE TABLE IF NOT EXISTS appdata_videos (id TEXT, link TEXT, title TEXT, subcode TEXT)");

Новая таблица:

db.execSQL("CREATE TABLE IF NOT EXISTS appdata_videos (id TEXT, link TEXT, title TEXT, subcode TEXT, viewed TEXT)");

PSЯ использую одноразовый прослушиватель firebase, так как мне нужно обновлять данные только один раз в день.

Я использовал эту функцию каждый раз, когда хотел очистить базу данных:

public void clearDB()
    {
        db.execSQL("DROP TABLE IF EXISTS subCodes");
        db.execSQL("CREATE TABLE IF NOT EXISTS subCodes (id TEXT, dbName TEXT, subName TEXT, tagline TEXT, pref INTEGER, hasInterviewQuestions TEXT, hasVideos TEXT, hasCodes TEXT)");
        db.execSQL("DROP TABLE IF EXISTS appdata_codes");
        db.execSQL("CREATE TABLE IF NOT EXISTS appdata_codes (id TEXT, question TEXT, code TEXT, tag TEXT, subcode TEXT, imglink TEXT, xlink TEXT)");
        db.execSQL("DROP TABLE IF EXISTS appdata_videos");
        db.execSQL("CREATE TABLE IF NOT EXISTS appdata_videos (id TEXT, link TEXT, title TEXT, subcode TEXT)");
        db.execSQL("DROP TABLE IF EXISTS appdata_interviewquestions");
        db.execSQL("CREATE TABLE IF NOT EXISTS appdata_interviewquestions (id TEXT, subcode TEXT, html TEXT)");
    }

1 Ответ

0 голосов
/ 29 ноября 2018

Надеюсь, это решение поможет вам,

step1: добавить новую дату столбца в новую таблицу

db.execSQL("CREATE TABLE IF NOT EXISTS appdata_videos (id TEXT, link TEXT, title TEXT, subcode TEXT, viewed TEXT, date TEXT)");

step2: получить идентификаторы из firebase и проверить, существуют ли идентификаторы в локальной базе данных(просмотреть все идентификаторы) пример:

if(isTheIdAvailableInLocalTable(idFromFirebase)){
//update the date column to todays date (dd-MM-yyyy)
}else{
//new entry so insert into local table with todays date (dd-MM-yyyy)
}

Шаг 3: удалить из локальной таблицы, где дата не совпадает с сегодняшней датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...