アプリストア(バージョン1.0)にアプリをアップロードしました。私のアプリは、いくつかのデータを保存するためにsqliteデータベースを使用しています。ここで、データベースにいくつかの変更を加えました(データベースのテーブルの1つに2つまたは3つの新しい列を追加しました)。以前のバージョンのアプリを新しいバージョン1.1(異なるdb構造を持つ)で更新したいと思います。これで、すでにバージョン1.0を使用しているユーザーがアプリをバージョン1.1にアップグレードすると、dbはアプリサンドボックスにすでに存在するため、アプリはバージョン1.1を指しますが、私のdbはまだ古いものです。古いデータがある場合は、新しいデータベースを使用したいと思います。私を助けてください。ありがとう。
2 に答える
sqliteはuser_versionプロパティと呼ばれるものをサポートしており、実行PRAGMA user_version
してアプリデータベースの現在のスキーマバージョンを照会できます。このクエリは、アプリの起動時に書き込み時に発生する可能性があります。
このuser_versionを更新するには、次の更新クエリを実行しますPRAGMA user_version = version_num
。
sqlite dbを作成するときはいつでも、このプロパティuser_versionを設定することをお勧めします。これにより、将来アップグレードするときに現在の値を照会できます。必要なものを確認し、残りの変更または作成テーブルを実行してスキーマバージョンをアップグレードします。
例えば:
最初のリリースでは、col1、col2を使用してtable1を作成します
sqlを実行してtable1を作成し、正常に実行されたら、pragma user_version = 1を実行します。これにより、現在のスキーマバージョンが1であることが示されます。
将来のリリースでは、新しいcol3を追加します。スキーマのバージョンを、2に変更する必要があります。
最初にuser_versionをクエリし、その値を確認します。値が1の場合は、alter scriptを実行して新しい列を追加し、ユーザーバージョンを2に設定する必要があります。
あなたの場合、以前にuser_versionを設定したことがないため、新規インストールとアップグレードのシナリオを区別するのは困難です。したがって、今のところ、dbが存在する場合はアップグレードシナリオであり、変更スクリプトを実行し、存在しない場合は新しいインストールシナリオであると想定し、スクリプトの作成を実行します。ただし、少なくとも将来的に問題を解決するために上記のプラグマを使用できるかどうかを確認してください。
起動時に古いデータベースかどうかを確認できます。古いデータベースである場合は、新しい構造(一時的な名前)で新しいデータベースを作成するルーチンがあり、古いデータベースから新しいデータベースにすべてのデータをコピーし、古いデータベースを閉じて削除します新しいデータベースを閉じ、名前を変更してから、最後にもう一度開いて、更新したアプリで使用できるようにします。簡単、高速、そしてそれを行うためにSQLiteの深い知識は必要ありません。