1

アプリが使用しているデータベーステーブルを更新した場合、たとえば、別のクラスを導入したり、既存のクラスを変更したりするとどうなりますか。ユーザーがアプリを更新するときに、アプリの既存のデータベースコンテンツを新しいデータベース定義にマージするにはどうすればよいですか?

4

2 に答える 2

3

onUpgradeDatabase()と呼ばれるこのための抽象メソッドがあります。この関数は、Androidがデータベースを更新する必要があると判断したときに呼び出されます。これは主に、データベースのバージョン番号を変更したときに発生します。

最近のすべてのプロジェクトでは、次のアプローチを使用して、ユーザーの電話のデータベースをバージョンごとにアップグレードしています(たとえば、ユーザーがアプリケーションをしばらく更新しなかった場合は、バージョン1からバージョン5にアップグレードします)。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    updateDatabase(db, oldVersion + 1, newVersion);
}

private void updateDatabase(SQLiteDatabase db, int fromVersion, int toVersion) {
    Log.i("Updating database from version " + fromVersion + " to " + toVersion);

    for (int ver = fromVersion; ver <= toVersion; ver++) {
        switch (ver) {
            case 1:
                handleDatabaseVersion1(db);
                break;
            case 2:
                handleDatabaseVersion2(db);
                break;                  
        }
    }
}

private void handleDatabaseVersion1(SQLiteDatabase db) {
   // create initial tables and so on
}

private void handleDatabaseVersion2(SQLiteDatabase db) {
   // here we extend the Users table with another two columns
}

新しいテーブル、新しい列、変更された列タイプなどのスキーマを変更する場合は、適切なSQLステートメントを実行して、すべてのユーザーのデータを削除せずにすべてを更新する必要があります。メモ帳アプリケーションを作成していて、すべてのメモがデータベースに保存されているとします。Notesテーブルを変更する場合は、ユーザーのメモを削除してはならないため、これらのデータは慎重に取り扱ってください。

于 2012-06-05T14:30:42.420 に答える
1

使用する必要がありますonUpgradeDatabase

この方法では、テーブルを変更できます。

于 2012-06-05T14:17:45.163 に答える