sql >> データベース >  >> RDS >> SQLite

SQLiteOpenHelper onCreate()/ onUpgrade()はいつ実行されますか?

    SQLiteOpenHelper onCreate() およびonUpgrade() コールバックは、データベースが実際に開かれたときに呼び出されます。たとえば、getWritableDatabase()を呼び出します。 。データベースヘルパーオブジェクト自体が作成されるときに、データベースは開かれません。

    SQLiteOpenHelper データベースファイルをバージョン管理します。バージョン番号はintです。 コンストラクターに渡される引数。データベースファイルでは、バージョン番号はPRAGMA user_versionに保存されています。 。

    onCreate() データベースファイルが存在せず、作成されたばかりの場合にのみ実行されます。 onCreate()の場合 正常に戻ります(例外をスローしません)。データベースは、要求されたバージョン番号で作成されたと見なされます。含意として、SQLExceptionをキャッチしないでください s onCreate() 自分で。

    onUpgrade() データベースファイルが存在するが、格納されているバージョン番号がコンストラクターで要求されたものよりも小さい場合にのみ呼び出されます。 onUpgrade() テーブルスキーマを要求されたバージョンに更新する必要があります。

    コードでテーブルスキーマを変更する場合(onCreate() )、データベースが更新されていることを確認する必要があります。 2つの主なアプローチ:

    1. onCreate()になるように、古いデータベースファイルを削除します 再度実行されます。これは、インストールされているバージョンを制御でき、データの損失が問題にならない開発時によく使用されます。データベースファイルを削除するいくつかの方法:

      • アプリケーションをアンインストールします。アプリケーションマネージャーを使用するか、adb uninstall your.package.name シェルから。

      • アプリケーションデータをクリアします。アプリケーションマネージャを使用します。

    2. onUpgrade()になるようにデータベースのバージョンをインクリメントします が呼び出されます。より多くのコードが必要になるため、これは少し複雑になります。

      • データの損失が問題にならない開発時のスキーマのアップグレードでは、execSQL("DROP TABLE IF EXISTS <tablename>")を使用できます。 で既存のテーブルを削除し、onCreate()を呼び出します データベースを再作成します。

      • リリースされたバージョンの場合、onUpgrade()でデータ移行を実装する必要があります そのため、ユーザーはデータを失うことはありません。



    1. Elastisearchからデータを削除する方法

    2. PostgreSQLでアクセントのない拡張機能を作成するときにエラーが発生しました

    3. android.database.sqlite.SQLiteCantOpenDatabaseException:不明なエラー(コード14):データベースを開くことができませんでした

    4. Oracle結合-従来の構文とANSI構文の比較