アプリのアップデート時に、内部で保持するSQLiteのDBを作り直す方法
アプリでSQLiteを使用しており、dbファイルはLibraryフォルダ配下に格納しています。
アプリ起動時にdbファイルをチェックし、ファイルが存在しなければdbファイル作成とテーブルのCreate実行をしています。
アプリ起動時にdbファイルが存在すれば、テーブル・データをそのまま使います。
ただ、アプリをアップデートしたときにもdbファイルは残っているので、もし新バージョンでテーブル構成を変更していた場合に、新旧のテーブルに違いがでてしまい、アプリ実行時にSQLエラーになる可能性があります。
この問題を回避する方法を調べた結果、以下のサイトで整理されていました。
sqliteデータベースを利用しているiPhoneアプリのアップデート : iPhoneアプリ開発・Swift・Objective-C勉強まとめ
この中の「user_version pragma」を使う方法を試しました。
DBからSQLでuser_varsionの値(整数値)を参照・設定することができます。
//値を参照 int value = await connection.ExecuteScalarAsync("PRAGMA user_version;"); //値を書き込み await connection.ExecuteAsync(string.Format("PRAGMA user_version = {0};", value))
dbファイルを作成した時に「user_version」にアプリのバージョン(整数値に変換)を格納しておいて、アプリ起動時に「user_version」を取得してバージョンを比較し、古い値であればdbファイルを削除・テーブルCREATEを行うようにしました。