Как протестировать обновление базы данных sqlite перед загрузкой новой версии моего приложения в игровой магазин в Android

Я получаю проблему. В таблице нет такой таблицы "table_name" в моем загруженном приложении после обновления версии приложения. Я вышел после тестирования. Я получаю эту проблему только после обновления старой версии приложения до новой версии приложения.

Что я реализовал

Я сделал код в методе onUpgrade(), а также обновил версию db в конструкторе, но не смог проверить его на устройстве.

шаг 1) Увеличить код версии от 1 до 2

public databasehelper(Context context) {

        super(context, DATABASE_NAME, null, 2);
        this.myContext = context;
        try {
            createDataBase();
            openDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Шаг 2) добавила новую таблицу в метод onUpgrade()

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.e("onUpgrade db", ">>>>called");
        switch (oldVersion) {
        case 1:
            db.execSQL(DATABASE_CREATE_notification_counter);
            Log.e("db version", ">>>"+oldVersion);
            // we want both updates, so no break statement here...
        case 2:
            Log.e("db version", ">>>"+oldVersion);
                  // I removed onCreate() method from here because new version will already have the new table
//          onCreate(db);
        }

    }

Шаг 3) метод onCreate() для новой версии базы данных.

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE_notification_counter); 
        Log.d("oncreate db", ">>>>called");
    }

У меня есть решение для обновления базы данных link1 link2 link3 link4

Почему я не смог его протестировать

мы загрузили платное приложение в игровой магазин, поэтому мне нужно протестировать метод обновления db в эмуляторе или устройстве, используя два разных apk - более старую версию и более новую версию. и я сначала тестировал устройство, используя старую версию, а затем новую версию (изменения db с добавленной новой таблицей в db), но метод onUpgrade() не будет вызываться в это время.

Вопрос:

1) Как я могу протестировать обновление db перед обновлением новой версии на магазин игр?

2) Он вызывается только при обновлении версии из магазина воспроизведения только?

Пожалуйста, помогите мне решить эту проблему.

Ответы будут оценены. Спасибо заранее.

Ответ 1

Версия db, хранящаяся внутри db. Просто создайте db (db_old) со старой версией, чем в DbHelper. Используйте DbHelper для подключения к db_old и вызывается метод onUpgrade.

Вы можете использовать существующий db как db_old, просто уменьшите его версию. Чтобы изменить версию, вы можете использовать любой редактор db sqlite.

Если вы не хотите писать тест для DbHelper и хотите имитировать обновление приложения, вы можете использовать команду adb install -r. Подробнее здесь.

Ответ 2

После длительного поиска и тестирования моего приложения, наконец...

У меня все получилось! В классе createDataBase отсутствует строка:

Я только что добавил строку ниже в мой код createDataBase()

this.getWritableDatabase();

Мы должны разрешать писать базу данных при создании базы данных, это разрешение будет давать разрешение на запись базы данных при обновлении приложения из магазина воспроизведения.

После успешного открытия база данных кэшируется, поэтому вы можете позвонить этот метод каждый раз, когда вам нужно писать в базу данных. (Убедиться для вызова close(), когда вам больше не нужна база данных.) Ошибки, такие как неправильные разрешения или полный диск могут привести к сбою этого метода, но будущие попытки могут быть успешными, если проблема исправлена.

Обновление базы данных может занять много времени, вы не должны вызывать этот метод из основного потока приложения, в том числе из ContentProvider.onCreate().

public void createDataBase() throws IOException 
        { boolean dbExist = checkDataBase(); 
          if (!dbExist) {
           this.getReadableDatabase();
            try {
                // ---If not created then copy the database---
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
          }
          else {
            /* This line: that has been solve my problem */
           this.getWritableDatabase();
          }
        }

public void openDataBase() выдает SQLException {

      // --- Open the database---         String myPath = path + DATABASE_NAME;
      myDataBase = SQLiteDatabase.openDatabase(myPath, null,
              SQLiteDatabase.OPEN_READWRITE); // you also have to add open_readwrite condition here
              /*onUpgrade(myDataBase, 1, 2);*/ // no need to call upgrade     here it will be called automatically

  }

При открытии базы данных необходимо дать условие записи записи.

Кроме того, onUpgrade() вызывается, когда создается новый объект класса DataBaseHelper, но только если номера версий базы данных не совпадают. Таким образом, это означает, что нет необходимости вызывать onUpgrade "самостоятельно". Если вы публикуете обновление своего db, просто увеличьте версию nr на единицу и примените изменения в методе onUpgrade().

Я получил его по данной ссылке:

база данных onUpgrade - oldVersion - newVersion

Надеюсь, это поможет любому для будущего разработчика!

Ответ 3

как протестировать обновление базы данных sqlite без загрузки приложения новой версии из магазина воспроизведения в android

1) Как проверить тестирование db перед обновлением новой версии в магазине воспроизведения?

я загрузил плагин для браузера sqlite для eclipse здесь

http://sourceforge.net/projects/sqlitebrowser/

и проверьте этот учебник о том, как использовать плагин sqlite

http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/

просто скопируйте банку с 1-й ссылки и вставьте в свою папку установки eclipse под названием plugin и перезапустите eclipse

затем запустите эмулятор и перейдите в свой пакет из DDMS, и вы сможете просмотреть свою базу данных sqlite и проверить, существуют ли изменения, внесенные вами в таблицы, или нет.

Ответ 4

Вы можете установить apk из другого источника, кроме Playstore (если он включен на вашем телефоне). Самый простой способ отправить его по телефону по электронной почте или скопировать apk через USB-кабель.