SQLiteOpenHelper onCreate() およびonUpgrade() コールバックは、データベースが実際に開かれたときに呼び出されます。たとえば、getWritableDatabase()を呼び出します。 。データベースヘルパーオブジェクト自体が作成されるときに、データベースは開かれません。
SQLiteOpenHelper データベースファイルをバージョン管理します。バージョン番号はintです。 コンストラクターに渡される引数。データベースファイルでは、バージョン番号はPRAGMA user_versionに保存されています。 。
onCreate() データベースファイルが存在せず、作成されたばかりの場合にのみ実行されます。 onCreate()の場合 正常に戻ります(例外をスローしません)。データベースは、要求されたバージョン番号で作成されたと見なされます。含意として、SQLExceptionをキャッチしないでください s onCreate() 自分で。
onUpgrade() データベースファイルが存在するが、格納されているバージョン番号がコンストラクターで要求されたものよりも小さい場合にのみ呼び出されます。 onUpgrade() テーブルスキーマを要求されたバージョンに更新する必要があります。
コードでテーブルスキーマを変更する場合(onCreate() )、データベースが更新されていることを確認する必要があります。 2つの主なアプローチ:
-
onCreate()になるように、古いデータベースファイルを削除します 再度実行されます。これは、インストールされているバージョンを制御でき、データの損失が問題にならない開発時によく使用されます。データベースファイルを削除するいくつかの方法:-
アプリケーションをアンインストールします。アプリケーションマネージャーを使用するか、
adb uninstall your.package.nameシェルから。 -
アプリケーションデータをクリアします。アプリケーションマネージャを使用します。
-
-
onUpgrade()になるようにデータベースのバージョンをインクリメントします が呼び出されます。より多くのコードが必要になるため、これは少し複雑になります。-
データの損失が問題にならない開発時のスキーマのアップグレードでは、
execSQL("DROP TABLE IF EXISTS <tablename>")を使用できます。 で既存のテーブルを削除し、onCreate()を呼び出します データベースを再作成します。 -
リリースされたバージョンの場合、
onUpgrade()でデータ移行を実装する必要があります そのため、ユーザーはデータを失うことはありません。
-