应用程序升级后丢失SQLite数据库数据 - 它是怎么回事?

时间:2011-06-21 06:44:05

标签: android sqlite upgrade

在我的应用程序中,我将数据存储在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 :(得分:0)

创建sqlitehelper类并在onupgrade()

中编写必要的代码