2012-04-13 16 views
5

私はアプリストア(バージョン1.0)にアプリケーションをアップロードしました。私のアプリはいくつかのデータを格納するためにsqliteデータベースを使用しています。今、私はデータベースにいくつかの変更を加えました(私のデータベースのテーブルの1つに2つまたは3つの新しいカラムを追加しました)。私は新しいバージョン1.1(別のDB構造を持っている)で私のアプリの以前のバージョンを更新したい。今バージョン1.0を使用しているユーザーがアプリケーションをバージョン1.1にアップグレードすると、dbはすでにアプリケーションサンドボックスに存在しているため、アプリケーションはバージョン1.1を指していますが、dbはまだ古いものです。私は、もしあれば、古いデータを持つ新しいデータベースを持っていたい。私を助けてください。ありがとう。新しいバージョンを別のsqlite db構造を持つアプリケーションストアに更新

+0

ここで私の答えを確認してください:http://stackoverflow.com/a/9851554/108574データベースアップグレード戦略。 –

+0

@HeShimingありがとうございました。しかし、私はすでにアプリケーションストアにバージョン1.0をアップロードしています。メタデータテーブルはありません(データベースバージョンを格納するためのものです)。今、私は新しいバージョンをアップロードしたいと思うし、db構造に変更があります。では、どうやってこれを達成するのですか? – anshul

+0

このメソッドはまだ有効です。 select文の戻り値をチェックするだけで、メタデータ表の有無を確認するだけです。それが存在しない場合は作成してください。 –

答えて

12

sqliteはuser_versionプロパティと呼ばれるものをサポートしていますので、PRAGMA user_versionを実行すると、現在のアプリケーションデータベースのスキーマバージョンを問い合わせることができます。このクエリは、アプリの起動時に最初に書き込むことができます。

このuser_versionを更新するには、更新クエリPRAGMA user_version = version_numを実行してください。

sqlite dbを作成するときは、このプロパティをuser_versionにすることをお勧めします。これにより、将来アップグレードする際に現在の値を照会できるようになります。スキーマのバージョンをアップグレードするには、必要なものを確認し、残りのalterまたはcreate tableを実行します。例えば

:最初のリリースでは

私はCOL1とTABLE1を作成し、col2に

私はTABLE1を作成するためにSQLを実行し、それが正常に完了すると、I = 1のプラグマuser_versionを実行するので、これは私が示されます現在のスキーマのバージョンは、私は、2

I最初のクエリuser_versionに私のスキーマのバージョンを変更する必要があり、それが価値だチェックし、それが1であれば、あなたが変更を実行する必要があり、私は新しいCOL3を追加し、将来のリリースでは1

です追加するスクリプト新しい列を設定し、ユーザーのバージョンを2に設定してください。

以前はuser_versionを設定していないため、新しいインストールとアップグレードのシナリオを区別することは困難です。今のところdbが存在すると仮定してアップグレードシナリオを実行し、alterスクリプトを実行し、存在しない場合は新しい インストールシナリオと仮定し、スクリプトの作成を実行します。しかし、あなたが上記のプラグマを使用して将来的にあなたの問題を解決できるかどうかを見てください。

+0

は、データベーススキーマを更新して維持するための良い方法のようです。 –

-1

古いデータベースであれば起動をチェックし、新しい構造(一時的な名前)で新しいデータベースを作成するルーチンがあれば、古いものから新しいものにすべてのデータをコピーして閉じる古いdb &それを削除し、新しいデータベースを閉じて名前を変更し、最後にもう一度開いて、更新されたアプリケーションを使用するようにします。簡単に、速く、&あなたはそれを行うためにSQLiteの詳細な知識を必要としません。

+0

しかし、私は、ユーザーが1.0から1.1にアップグレードしたときにのみ、この作業をしたいと思っています。あなたが話しているアプローチは、アプリケーションデリゲートのappDidFinishLaunchingメソッドで実装されるため、このコード行はアプリを起動するたびに実行されます。右???だから、私はsqliteデータベースのバージョン番号のようなものが必要です。 – anshul

+0

そうではありません - データベースが新しい構造であるかどうかを確認する必要があります。 – SomaMan

関連する問題