私のアプリでは、さまざまなリストを作成できます。これらのリストはSQLiteテーブルに格納されます。また、データベースには、将来のアプリのアップデートで変更したいテーブルがあります。私はその場合にユーザーデータの損失を防ぐために何をすべきかわかりません。アプリケーションの更新時にSQLiteデータベースのユーザーデータを処理する方法は?
0
A
答えて
3
あなたは、データを損失することなく、新しいバージョンに既存のDBを移行することができ、この関数内の関数
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
if(oldVersion < newVersion) {
switch(oldVersion) {
case 29:
migrateFrom24(sqLiteDatabase);
break;
}
}
があり、新しいテーブルやupdte既存のテーブルに
を追加することができ、ここでのサンプルコードがあります:
private static void migrateFrom24(SQLiteDatabase db) {
db.execSQL("ALTER TABLE Table1 RENAME TO Table2");
db.execSQL("create table Table3 (_id INTEGER PRIMARY KEY AUTOINCREMENT,created INTEGER ,account_id TEXT DEFAULT \'\',warehouse_id TEXT DEFAULT \'\',skunit_id TEXT DEFAULT \'\',transaction_id TEXT DEFAULT \'\',sku_quantity TEXT DEFAULT \'\',skunits_price TEXT DEFAULT \'\',sku_uploaded TEXT DEFAULT \'0\')");
db.execSQL("DROP TABLE Table4");
db.execSQL(" ALTER TABLE Table5 ADD COLUMN column1 INTEGER ");
}
0
2
アプリケーションが更新されると、あなたのSQLiteデータベースのバージョン。一度あなたのバージョンを増やすと、onUpgrade(~)
が呼び出されます。
onCreate(~)
をonUpgrade(~)
にもう一度呼び出して、データベーススキーマに変更を加えてもかまいません。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "SQLLiteHelper - onUpgrade");
Log.w(TAG, "Upgrading application's database from version "+ oldVersion + " to " + newVersion + ", which will destroy all old data");
/* Drop older table if existed */
db.execSQL("DROP TABLE IF EXISTS " + "TABLE_NAME");
}
あなたのデータを取り戻した後に一時テーブルを削除する必要があります。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "SQLLiteHelper - onUpgrade");
Log.w(TAG, "Upgrading application's database from version "+ oldVersion + " to " + newVersion + ", which will destroy all old data");
/* Moving Data From Old Database to New Database */
db.execSQL("CREATE TABLE TEMP_TABLE_NAME AS SELECT * FROM " + "TABLE_NAME");
/* Deleting Old Table */
db.execSQL("DROP TABLE IF EXISTS " + "TABLE_NAME");
/* Creating Same Table with new/updated schema structure*/
db.execSQL("CREATE TABLE " + "TABLE_NAME" + "(-----TABLE COLUMN DETAILS-----)");
/* Copy back data from temporary tables */
db.execSQL("INSERT INTO " + "TABLE_NAME" + " SELECT * FROM TEMP_TABLE_NAME");
/* Delete temporary table*/
db.execSQL("DROP TABLE IF EXISTS TEMP_TABLE_NAME");
}
ご希望の場合は、こちらをご覧ください。 ハッピーコーディング!
関連する問題
- 1. SQLiteデータベースは、アプリケーションの更新時にリセットされますか?
- 2. 更新時のC#SQLiteデータベース
- 3. 処理中にコントロールの更新を処理する方法は?
- 4. vuejsアプリケーションでブラウザの更新を処理する方法
- 5. iPhone用のアプリケーションのSQLiteデータベースの更新
- 6. Androidアプリケーションのインストール時にsqliteデータベースをコピーする方法
- 7. データベースを更新するための例外メッセージを処理する方法は?
- 8. ユーザーデータを更新する方法Firebase?
- 9. NHibernateがアプリケーションの実行時にスキーマの変更を処理する方法
- 10. awsベースのサーバーレススタックでユーザーデータを処理する方法
- 11. PHPでデータベース/テーブルの変更を処理する方法は?
- 12. androidでSQLiteデータベースの最終更新時刻を見つける方法
- 13. sqliteデータベースのデータを更新する方法
- 14. ウェブサイトの更新時の処理
- 15. djangoでの同時変更を処理する方法は?
- 16. 角度でサイトの更新を処理する方法は?
- 17. Androidのsqliteデータベースの更新?
- 18. SQLite Androidデータベースのバッチ処理の実装
- 19. 異なる時刻に到着したユーザーデータで複数のプッシュ通知を処理する方法は?
- 20. sqliteデータベースの同期/更新
- 21. androidのSQLiteデータベースの破損を適切に処理する
- 22. CoreDataStackの更新時に同じデータベースを使用する方法
- 23. アプリケーションでのデータベース処理
- 24. ページの更新時にinit rootScopeにユーザーデータを格納します。
- 25. Sqliteデータベースの処理方法はiOSでロックされていますか?
- 26. 同じデータベースを使用する複数のアプリケーションからのストアドプロシージャコードの変更を処理する方法は?
- 27. Windowsサービスの時間変更を処理する方法
- 28. JWTでユーザーデータを処理するベストプラクティス
- 29. androidの既存のsqliteデータベースのデータを更新するには
- 30. リポジトリからの更新時に、生産と開発の変更を効率的に処理する方法
更新でデータベース構造とデータを変更するとどうなりますか? –
_your_表(ユーザー・データが入っている表ではない)の場合、内容を保持する必要はありません。次に、新しい構造体を削除して再作成します。ユーザーデータが入っているもの(または自分のデータを保持する必要がある場合)の場合は、データを_migrate_する必要があります。単純にALTER TABLEを実行することは可能ですが、一般的には既存のテーブルの名前を変更して新しいテーブルを作成し、データを転送/マッサージします。現在のデータがv1、v2、...などであるかどうかを記録する何らかの種類の "DatabaseSchema"設定を追加して、適用する変更を知ることができます。 – TripeHound