PhoneGapとjQueryMobileを使用してiOSとAndroid用のクロスプラットフォームHTML/Javascriptアプリを構築しており、ローカルデータベース(localdatabase / websql)の1つのテーブルにいくつかの新しいフィールドを追加してアプリをアップグレードしています。
課題 データベースが新しいテーブルフィールド、既存のユーザーデータで拡張されたときに、ユーザーデータが削除されたり、アクセスできない古いバージョンのデータベースにロックされたりしないようにしたいと思います。
背景: 私のアプリには、ユーザーのデータ(収入と支出、およびいくつかの設定)のローカルデータベースがあります。これらのデータは永続的である必要があり、私が始めたときの方法はHTML5 localDatabase機能を使用していました。これは永続的であり、iOSとAndroidのブラウザー、およびほとんどのデスクトップブラウザーで利用できるためです。
localdbの処理を少し簡単にするために、persistenceJSと呼ばれるJavascriptプラグイン/ライブラリ/thingyを使用しています。しかし、私の質問は、persistenceJSに固有のものではありません。
私は、設定テーブルのいくつかの新しいフィールドを利用する新しいバージョンのアプリに取り組んでいます。したがって、これらのユーザーが新しいアプリをダウンロードして実行するときは、設定テーブルにこのフィールドが含まれているかどうかをテストする必要があり、含まれていない場合はフィールドを作成する必要があります。
このテストを行うにはどうすればよいですか?私は2つの考えを見る:
openDatabase関数で使用されるデータベースラベル...を使用します。これは、バージョン番号を保存するために一部の開発者によって使用されているようです。このオプションに関する私の問題は、openDatabaseを使用してデータベースを開き(データベースが存在しない場合は新しいデータベースを作成し)、データベースがまだ存在しない場合は特にコールバックを実行する方法しか知らないことです。したがって、ラベルに「v2」などを指定してテーブルを開くと、新しいテーブルが作成されますか?もしそうなら、それは古いテーブルの値を新しいものにコピーしますか?
テーブルフィールドの存在を確認します...openDatabaseを使用して、テーブルフィールドの存在をテストできます。そうでない場合は、追加できます。テストは、ユーザーがアプリを開くたびに実行されますが、これは少し原始的なようです。
ちなみに、webSQL / localDbが大君主によって非推奨になっていることは知っていますが、それでも私のツールであり、今のところはそれに固執したいと思います。