まず、アップグレードの際に何かを実行することは考えられないかもしれません。なぜなら、これは不可能だからです。 @lxtのように、データベースバージョンを示すために値をプリファレンスに格納できますが、防弾ではない可能性があります。
この問題を解決する一般的なアプローチは、自己構築型メタデータを使用することです。最初にデータベースを作成したときは、"metadata"
または"properties"
という名前の追加のテーブルを作成し、2つのvarcharカラム"name"
および"value"
を追加する必要があります。 1行、("database_ver", "1")
を挿入します。
データベースレイヤ(またはアダプタ)クラスでは、開くための「開く」メソッドを作成します。この方法では、まずselect database_ver from metadata;
を実行してデータベースのバージョンを確認します。何も取得されない場合は、テーブル作成スクリプトを実行し、database_ver = 1行を挿入します。
その後、テーブル形式をアップグレードした場合、各バージョンにalter table
ステートメントを入力し、database_ver
に基づいて実行します。アップグレード後のインストールでは、更新されたcreate table
ステートメントを使用して、alter table
を経由せずに"database_ver"
を"2"
(以上)に直接設定することができます。
嗜好に値を格納するのと比べて、実際にはデータベース自体に格納する方が一般的です。ユーザーがファイルをどこかにバックアップしたり、バージョンをスキップしても、メタデータテーブルによってデータベースの形式を伝えることができます。
FMDBはこのようなメカニズムを実行しても問題ありません。