Android SQLiteデータベースのアップグレードの問題


SQLiteはAndroidに内蔵されている小さなリレーショナル・データベースです.SQLiteOpenHelperは、データベースの作成とバージョンアップの問題の管理を支援する抽象クラスです.この抽象クラスを継承し、データベースをカスタマイズするためのいくつかの方法を実装できます.次の2つの方法を書き直さなければなりません.
  • public void onCreate(SQLiteDatabase db)
  • public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

  • また、SQLiteOpenHelperサブクラスは、インスタンスを構築する際に、現在のデータベースの名前(name)、バージョン番号(version)を指定する必要があります.ここで名前はデータベースの格納時のファイル名を決定し、ここのバージョン番号とAppはAndroid Mainfestにある.xml定義のversionCodeには絶対的な関連はありません.つまり、App更新時にデータベースのデータ構造が変化しない場合は、データベースのバージョン番号を増やす必要はありません.
    onCreate:呼び出しタイミングは、ユーザーがアプリケーションを初めてインストールして起動するか、Appデータベースファイルをクリアして起動します.この場合、この関数で初期のデータテーブルの作成を完了できます.
    onUpgrade:呼び出しのタイミングは、ユーザーがアプリケーションの更新を行い、インストールを上書きして起動し、新しいバージョンでデータベースのバージョン番号が古いバージョンのデータベースのバージョン番号より高い場合に呼び出されます.この場合、この関数では、データベース・バージョンのアップグレードによる古いバージョンの互換性の問題と、データの移行の問題を完了できます.
    もう1つの一般的な書き換えは必要ありませんが、バージョン番号4でバージョン番号3のパッケージを降格させるなどの逆降格が適用された場合に書き換える必要がある方法onDowngradeは、降格オーバーライドインストールが適用された場合に書き換えられないとクラッシュします.
    データベース・バージョンがアップグレードされると、次のような状況に遭遇することがあります.
  • テーブルを拡張する必要があるフィールド
  • 元のテーブルの冗長フィールド
  • を削除
  • 新しいテーブル
  • これらの問題を処理するには、古いデータベースの履歴データを損なうことなく完了する必要があります.ここでは,ユーザの携帯電話に以前にインストールされていたのはデータベースバージョン1のパケットであり,アップグレードインストールされているのはデータベースバージョン番号2のパケットであると仮定する.この場合、データベースバージョン2のパッケージでこれらのアップグレードロジックを処理します.
    まず、onUpgradeでテーブルのフィールドを拡張します.
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //       1,   pedant    student_name  
        if(oldVersion   
      

    SQLite ALTER TABLE , , 。 , , , DROP COLUMN 。 SQLite Frequently Questions

    pedant a、b、c, c , onUpgrade :

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //       1,   pedant c  
        if(oldVersion  
      

    c 。

    CREATE 。

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //       1,    newtb
        if(oldVersion