1

DBの新しいデータで更新する必要のあるアプリがあります。更新するものは他にありません。スキーマの変更もコードの変更もありません。私がやりたいのは、ユーザーが変更できない行をDBに追加することだけです。

通常、最初のインストール時に、からDBをコピーしassets/ます。その後、プログラムの実行時に、DBファイルが存在するかどうかを確認し、存在する/data/data/my.package/databases場合は、2回目のコピーを行いません。

これで、アプリの新しいバージョンには完全なDBがそのまま残ります。古いバージョンを持っている人のために、新しい行を追加したいと思います。私にはいくつかの選択肢があります:

  • onUpgrade()の関数を使用しSQLiteOpenHelperて行を挿入します。行が多いのでこれはやりたくないので、assets/インポートするフォルダーに入れたいと思います。assets/内部からアクセスする方法はありますonUpgrade()か?
  • 起動するたびにDBを削除して再作成します。これは無駄ですが、以前のバージョンのアプリがインストールされていても、完全なDBが確実に存在するようになります。
  • インストールされたアプリの以前のバージョンを確認し、最初の起動時にDBを選択的に削除して、assets/最初の起動時にのみ新しい行がコピーされたDBを作成します。このため、何をチェックすればよいのかよくわかりません。実行時に古いアプリのバージョンを知る方法はありません。またはを使用して、その前にユーザーがインストール/更新した場合、明らかに私が探している最初のバージョンを持っているかどうPackageInfo.firstInstallTimeかを確認することを考えました。PackageInfo.lastUpdateTimeエラーが発生しやすいことはわかっていますが、現在アプリを市場から外しているので、ここに余裕があります。

この質問を言い換える別の方法は次のとおりです。アプリをアップグレードしてい/data/data/my.package/*て、バージョンの変更に基づいて削除または更新したいファイルがある場合、以前は何がわからないので、どうすればそれを達成できますか?バージョンがインストールされましたか?

4

1 に答える 1

0

onUpgradeコールバックは、古いバージョンと新しいバージョンの両方を通知します。

于 2012-11-14T18:13:19.207 に答える