9

iPhoneアプリのデータソースとしてsqliteを使用しています。アプリケーションのアップグレードに関して2つの質問があります。

1.)データはすべてconfig/nontransactionalです。つまり、読み取り専用です。構成データを更新/追加するときに、アプリのアップグレードを発行します。ユーザーが更新されたiPhoneアプリを入手すると、元のアプリはアンインストールされますか?その場合は、新しいdb構成データがデプロイされるので問題ありません。そうでない場合、データを置き換えるにはどうすればよいですか?

2.)データは構成およびトランザクションです。つまり、ユーザーはデータをデータベースに保存できます。ユーザーがアプリの新しいバージョンにアップグレードするとき、既存のデータを維持したいが、すべての構成データを置き換えたい。これを実現するには、アプリ内にINSERTスクリプトとUPDATEスクリプトを保存する必要があると思います。それについて行くための効率的な方法は何ですか?

4

2 に答える 2

11

cdespinosa はシナリオ #1 をよく説明しているので、#2 に取り組みます。

iPhone ではまだこれを行っていませんが、デスクトップ環境でこれを処理する最も簡単な方法は、構成データを別のデータベースに保持することです。複数のデータベースに簡単に接続できます。メイン データベースを開くことから始めます。これは、おそらく変更可能なデータベースであるはずです。次にsqlite3_execATTACH次のようなステートメントがあります。

ATTACH 'filepath' AS config;

それ以降、次のようなことができます。

SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;

構成データベースに書き込むと、アプリケーションが署名チェックに失敗して起動しなくなり、iPhone に含まれている SQLite のバージョンが古いため、読み取り専用フラグをサポートしていないことを理解しています。このため、構成データベース ファイルをサンドボックスにコピーし、バンドル内のファイルの代わりにそのコピーを開く必要があります。

(もちろん、SQL を使用して、あるデータベースから別のデータベースに値をコピーすることもできます。しかし、既に構成データベース全体をサンドボックスにコピーしている場合は...そしてそうすべきです...それは単なる余分な手順です。貼るだけ。)

他の誰かが詳細を提供してくれることを願っています。:)

于 2009-02-28T02:02:20.883 に答える
5

ユーザーがアプリをアップグレードすると、古いアプリ バンドルがアンインストールされ、新しいアプリ バンドルがインストールされますが、アプリ バンドルに関連付けられているユーザー データはそのまま残ります。

したがって、選択肢は、a) データをアプリ バンドルに残す (自動的に置き換えられる) か、b) 最初の実行時にデータを一方的にユーザー データ領域にコピーする (アップグレード時に意図的に置き換える) ことです。

#2はsqliteに詳しい人に任せますが、実際に行っているのであれば、「mysql」タグの代わりに「sqlite」タグを使用することをお勧めします。

于 2009-02-17T17:13:09.677 に答える