10

私はAndroidアプリケーションを作成しました。これは、起動時に新しいバージョンのアプリケーションがあるかどうかを確認します。はいの場合、アプリケーションは新しいapkファイルをダウンロードし、新しいapkをオーバーインストールします。私のアプリケーションはsqliteデータベースを使用しています。ただし、このデータベースは、あるバージョンから別のバージョンに変更される可能性があります。私は次の方法を使わなければならないと思います:

 onUpgrade()

でも使い方はよくわかりません。

アプリケーションを起動するとき、私はこのコードをクリートデータベースに使用します(存在しない場合):

DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)

onUpgrade()使用方法が必要な場合はどうすればよいですか?そして、いつそれを呼び出さなければなりませんか?

4

3 に答える 3

20

onUpgrade()DBのバージョンが変更されたときに呼び出されます(自分で呼び出す必要はありません)。これは、基礎となるテーブル構造が変更されたことを意味します。

一般的に、これは OS が「ねえ、データベース構造バージョン 10 を要求しましたが、ここで古いものを見つけたので、データベースの使用を開始する前に修正するチャンスです (構造の不一致によりクラッシュする可能性があります) 」と言っているということです。 " .

その方法では、古いデータベースの構造を、列の追加/削除、行の内容の変換、古いデータベースの完全な削除など、現在のバージョンの要件に一致する構造にアップグレードし、最初から作成する必要があります-Androidの場合ここで何をするかは問題ではありません。これは、コードが必要な仕事 (もしあれば) を行うための一種の緊急コールバックです。ユーザーが頻繁に更新しない可能性があることに注意する必要があるため、X が (Y-1) と等しくない可能性があることを認識して、バージョン X から Y へのアップグレードを常に処理する必要があります。

于 2012-10-31T13:35:44.583 に答える
5

SQLiteOpenHelper を使用している場合、DB バージョンを変更するたびに onUpgrade が呼び出されます。これが機能するには、追加の要件があります。データベース名は同じままにする必要があります。

Old Version:
dbName = "mydb.db"
dbVersion = 1

New Version:
dbName = "mydb.db"
dbVersion = 2

コンテンツ プロバイダーの onCreate で、これらのパラメーターを受け取る SQLiteOpenHelper のインスタンスを作成します。SQLiteOpenHelper の実装は次のようになります。

public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {

        public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
            super(context, dbName, null, dbVersion);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            //Code to create your db here
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // Code to upgrade your db here
        }

}

テーブルを変更したり、データベースにテーブルを追加したりするときにも呼び出されます

于 2012-10-31T13:43:56.820 に答える