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