2

我需要覆盖 onDowngrade 方法,以便onDowngrade()在我的应用程序中的旧版本数据库替换应用程序的现有版本时调用

即(新版本数据库)<(旧版本数据库)。

示例:当我尝试使用数据库版本 3 安装新应用程序时,将使用数据库版本 2 替换当前或已安装的应用程序,从未调用此 onDowngrade 方法。

我希望我的问题很清楚。请借此机会回答这个问题,对这种方法有所了解。

MY新版app源码:

public class MyDatabase extends SQLiteOpenHelper
    {
        private static final int DB_VERSION     =   10;

        public MyDatabase(Context context) 
        {
            super(context, DB_NAME, null, DB_VERSION);
        }
       @Override
       public void onCreate(SQLiteDatabase db) 
        {
            Log.d("Method","onCreate called");

                .....
                .....
                .....

        }
     @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.d("Method","onUpgrade called");
                 .....
                 .....
                 .....
        }
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
        Log.d("Method","onDowngrade called");
                 .....
                 .....
                 .....
        }

}

清单.xml

版本代码:10

MY旧版app源码:

 public class MyDatabase extends SQLiteOpenHelper
    {
        private static final int DB_VERSION     =   9;

        public MyDatabase(Context context) 
        {
            super(context, DB_NAME, null, DB_VERSION);
        }
       @Override
       public void onCreate(SQLiteDatabase db) 
        {
            Log.d("Method","onCreate called");

                .....
                .....
                .....

        }
     @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.d("Method","onUpgrade called");
                 .....
                 .....
                 .....
        }
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
        Log.d("Method","onDowngrade called");
                 .....
                 .....
                 .....
        }

}

清单.xml

版本代码:9

最后,我的查询是我用旧应用程序替换了新应用程序(上面有相应的源代码)。

但是旧版本的应用程序不调用onDowngrade().

4

2 回答 2

2

找到了这个特定问题的答案。

在我的 AndroidManifest.xml 文件中,minSdkVersion 为 8,如下所示,它从不调用 onDowngrade()。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

,但只有当 minSdkVersion 必须大于或等于 11 时才会调用 onDowngrade 方法,如下所示。

解决方案:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="18" />
于 2013-11-12T11:49:04.020 回答
-1

它不是要覆盖的抽象方法。

你可以重载这个方法说

public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {

   // what to do here

}

默认情况下它会抛出 SQLiteException。

您已将 DB 版本变量声明为静态。所以即使你重新声明它也不会更新。

在初始化数据库之前,您必须在启动器活动中的某个位置重新初始化它。

还要确保清单中的最小版本

<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
于 2013-11-11T10:37:12.767 回答