在安装apk时执行特定操作?

时间:2012-10-04 06:52:01

标签: android database-schema android-install-apk

我更新了应用程序的数据库。但是,从市场更新应用程序的用户每次启动应用程序时都会看到崩溃,因为新的数据库结构与旧数据库不兼容。要求他们卸载并安装应用程序并不好,我需要在安装时只执行一次操作,即清除旧数据库并创建新数据库。每次应用程序启动时都不应调用此选项,仅在安装时或应用程序第一次启动时调用。

我想我已经清楚地定义了我的情况,现在我从哪里开始?我是否应该让用户无法卸载并安装应用程序,或者可以执行我的要求?

3 个答案:

答案 0 :(得分:2)

只需更改数据库的版本,并覆盖onUpgrade课程中的DatabaseHelper

    private static final int DATABASE_VERSION = 2;

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
                + ", which will destroy all old data");

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CREATION);
        onCreate(db);
    }

答案 1 :(得分:1)

为什么不实施SQLiteOpenHelper onCreate()方法? 此类提供了有用的onUpgrade()和{{1}}方法。

见这里:onUpgrade()

或者在这里:Is the onUpgrade method ever called?

答案 2 :(得分:1)

首先清除旧数据库并创建一个新数据库真是个坏主意(看到数据丢失,用户真的很生气。)

您应该始终尝试使用新列和内容升级以前的数据。您应该始终尝试在不清除数据的情况下更改表的结构,而不是清除整个数据。

还有一件事是您可以在DBHelper类的onUpgrade()方法中升级到新数据库。