尚未调用onDowngrade()方法

时间:2013-11-11 10:12:55

标签: android sqliteopenhelper

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

即。 (较新版本的db)< (旧版本db)。

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

我希望我的问题非常明确。请抓住机会通过回答这个问题来了解这种方法。

我的新版应用源代码:

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");
                 .....
                 .....
                 .....
        }

}

的Manifest.xml

VersionCode:10

我的旧版应用源代码:

 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");
                 .....
                 .....
                 .....
        }

}

的Manifest.xml

VersionCode:9

最后,我的查询再一次用旧应用程序替换了新应用程序(其中包含相应的源代码)。

但较早版本的应用不会调用onDowngrade()

2 个答案:

答案 0 :(得分: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" />

答案 1 :(得分:-1)

它不是一种覆盖的抽象方法。

您可以重载此方法

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

   // what to do here

}

默认情况下会抛出SQLiteException。

您已将DB Version变量声明为static。因此即使重新声明它也不会更新。

在初始化DB之前,您必须在启动器活动的某些位置重新初始化它。

同时确保清单中的最小版本

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