[解決済み] Sqliteのアプリ内データベース移行のためのベストプラクティス
質問
iphoneにsqliteを使用していますが、データベーススキーマが時間と共に変化することが予想されます。 毎回うまく移行するために気をつけるべきこと、命名規則、およびゴチャゴチャしたことは何ですか?
例えば、私はデータベース名にバージョンを追加することを考えました(例:Database_v1)。
どのように解決するのですか?
私は定期的にsqliteデータベースを更新し、古いデータベースを新しいスキーマに移行する必要があるアプリケーションを保守していますが、ここで私が行うことは次のとおりです。
データベースのバージョンを追跡するために、私はsqliteが提供する組み込みのユーザバージョン変数を使用します(sqliteはこの変数に対して何もしませんので、好きなように自由に使用してください)。 0から始まり、以下のsqliteステートメントでこの変数を取得/設定することができます。
> PRAGMA user_version;
> PRAGMA user_version = 1;
アプリが起動すると、現在のユーザー バージョンをチェックし、スキーマを最新の状態にするために必要な変更を適用し、ユーザー バージョンを更新します。 私は更新をトランザクションでラップし、何か問題が発生しても変更がコミットされないようにします。
スキーマを変更するために、sqliteは特定の操作(テーブルの名前の変更や列の追加)に対して"ALTER TABLE"構文をサポートします。 これは、既存のテーブルをインプレースで更新する簡単な方法です。 こちらのドキュメントを参照してください。 http://www.sqlite.org/lang_altertable.html . 列の削除や、"ALTER TABLE" 構文でサポートされていないその他の変更については、私は新しいテーブルを作成し、そこに日付を移行して、古いテーブルを削除し、新しいテーブルの名前を元の名前に変更します。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLiteデータベースで、一度に複数行を挿入することは可能ですか?
-
[解決済み] 私のアプリケーションは「暗号を含む」のでしょうか?
-
[解決済み】SQLiteデータベースのロックを解除する方法は?
-
[解決済み] iPhoneのシミュレータに.ipaファイルをインストールする方法は?
-
[解決済み] TabBarのタブビューにプログラムで切り替える?
-
[解決済み] 静的ライブラリのObjective-Cカテゴリ
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] iPhoneシミュレータのクリーンアップ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み] エラー : サービスは無効です
-
[解決済み] 静的ライブラリのObjective-Cカテゴリ
-
[解決済み] iphoneシミュレーターでキーボードを使うにはどうしたらいいですか?
-
[解決済み] position: iPadとiPhoneで固定が効かない。
-
[解決済み] iOSアプリをクラッシュさせる確実な方法とは?
-
[解決済み] iPhone 5 CSSメディアクエリ
-
[解決済み] iOS: HTTP POST リクエストを実行するには?
-
[解決済み] UITableViewのセクションヘッダーのデフォルトの高さ
-
[解決済み] MKMapViewのズームレベル設定