Потеря данных БД SQLite после обновления приложения - как это может быть? - PullRequest
3 голосов
/ 21 июня 2011

В моем приложении я храню данные в базе данных SQLite. И время от времени я выпускаю новые версии приложения, но никогда не меняю схему базы данных. Один из моих клиентов сообщил мне, что каждый раз, когда он обновляет приложение, он теряет все данные.

Я тщательно исследовал свой код и не смог найти, как возможно, что пользователь потерял данные.

В основном мой код, связанный с обработкой базы данных SQLite, выглядит следующим образом:

public final class Storage
{
    private SQLiteDatabase database;
    public static final String DATABASE_NAME="my.db"; //db name
    /**
     * database tables creation scripts
     */
    private static final String DATA1_CREATE="create table if not exists ...";
    private static final String DATA2_CREATE="create table if not exists ...";
    private static final String IDX_DATA1_CREATE="create index if not exists...";
    private static final String IDX_DATA2_CREATE="create index if not exists ...";

    /**
     * Constructs Storage object and if necessary creates tables
     * @param context application environment (Android context)
     */
    public Storage(Context context)
    {
        database=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_WORLD_WRITEABLE, null);
        database.beginTransaction();
        try
        {
            database.execSQL(DATA1_CREATE);
            database.execSQL(IDX_DATA1_CREATE);
            database.execSQL(DATA2_CREATE);
            database.execSQL(IDX_DATA2_CREATE);
            database.setTransactionSuccessful();
        }
        catch(Exception e)
        {
            Log.d(TAG, "Can't create database", e);
            database=null;
            return;
        }
        database.endTransaction();
    }

    public synchronized SQLiteDatabase getDatabase()
    {
        return database;
    }

    public void close()
    {
        if(database!=null)
            database.close();
    }
}

Я вижу в своем коде только тот недостаток, что я не расширяю класс SQLiteOpenHelper - может ли это быть потенциальной проблемой и привести к потере данных во время обновления приложения?

1 Ответ

0 голосов
/ 21 июня 2011

создайте класс sqlitehelper и напишите необходимые коды в onupgrade ()

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