Обновление базы данных SQLite при выпуске новой версии приложения для Android в магазине.

Я использую sqlite в своем приложении для Android, файл моей базы данных называется data.db. Предположим, что у меня есть две таблицы, одна из которых имеет статические значения (только для чтения), а вторая сохраняет динамические значения и отправляет приложение в playStore.

В следующей версии я обновил data.db и обновил значения в первой таблице, добавил новые столбцы во вторую таблицу и добавил третью новую таблицу и отправил приложение в PlayStore. Итак, как я могу проверить, обновляет ли пользователь приложение, и как лучше всего сохранить существующие данные и как я могу программно обновить data.db, если это обновление, а не новая установка?


person Pankaj    schedule 24.03.2015    source источник


Ответы (5)


Вы можете использовать метод onUpgrade SQLiteOpenHelper. В методе onUpgrade вы получаете oldVersion в качестве одного из параметров.

В случае onUpgrade используйте Switch и в каждом из случаев используйте номер версии, чтобы отслеживать текущую версию базы данных, которая была отправлена ​​для каждой новой версии базы данных.

Лучше всего переходить от oldVersion к newVersion, увеличивая версию на 1 за раз, а затем шаг за шагом обновлять базу данных. Это очень полезно, когда кто-то с базой данных версии 1 обновляет приложение через долгое время до версии, использующей базу данных версии 7, и приложение начинает давать сбой из-за определенных несовместимых изменений.

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

person Roadblock    schedule 24.03.2015

Есть два способа

1] Изменена версия базы данных, так что когда пользователь обновляет метод приложения SQLiteOpenHelper's onUpgrade(), он выполняется в этом методе, вы можете написать код для удаления таблиц и создания новых таблиц в соответствии с новой схемой и отправки сетевых вызовов для выборки данных.

2] Нажмите приложение с предустановленной базой данных. Создайте базу данных с версией db и сохраните ее в папке assets. Всякий раз, когда приложение запускается, сравнивайте версии базы данных активов и базы данных приложения. если версия базы данных актива выше, чем версия базы данных приложения, это означает, что вам необходимо обновить базу данных. Непосредственно скопируйте базу данных Assete в структуру папки и отправьте дельта-вызов для извлечения данных.

person Prachi    schedule 24.03.2015

В этом примере вы добавили новый столбец, поэтому изменения в этом случае должны быть такими (здесь вы не потеряете свои данные).

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " +
     "name_of_column_to_be_added" + " INTEGER";
    db.execSQL(sql);        
} 
person Salim Lachdhaf    schedule 26.01.2016

Я советую вам использовать библиотеку http://www.activeandroid.com/. Он поддерживает миграции. Вам просто нужно записать [n].sql файлов в папку assets/migrations для n версии вашей модели базы данных. Активный Android поддерживает существующую версию и применяет требуемую миграцию.

person Alex Klimashevsky    schedule 24.03.2015

package com.example.sqllite_db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabseAdapter extends SQLiteOpenHelper

{
    public static String DatabaseName="NewDatabase";
    public static int DatabaseVersion=1;

    public DatabseAdapter(Context context) 
    {
        super(context,DatabaseName,null,DatabaseVersion);
        // TODO Auto-generated constructor stub
    }

    /*public static String TableUser="tb1";
    public static String keyId="id";
    public static String keyName="name";
    public static String keyPass="pass";*/


    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        // TODO Auto-generated method stub
        String createQuery="create table tb1(name text,pass text);";
        db.execSQL(createQuery);
        //String createQuery1="create table tb2(pass text);";//("+keyName+"text,"+keyPass+"text);"; 
        //db.execSQL(createQuery1);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        // TODO Auto-generated method stub
        db.execSQL("drop table tb1");
        onCreate(db);
        //db.execSQL("drop table tb2");
        //onCreate(db);

    }

}

поместите базу данных в метод Upgrade, затем снова вызовите в ней метод Create, и ваша база данных будет обновляться при загрузке новой базы данных.

person NIRMAL TANDEL    schedule 24.03.2015
comment
Это приведет к удалению всех данных, которые были сохранены приложением ранее. Это очень плохой дизайн. - person Roadblock; 24.03.2015