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()
でデータ移行を実装する必要があります そのため、ユーザーはデータを失うことはありません。
-