2012-11-24 10 views
7

私は3つのテーブルを持つsqliteを持つアプリケーションを持っています。私の懸念は、別のテーブル(4つのテーブル)を追加するアップデートを導入すると、更新されたバージョンはデータベースを抹消するということです。更新後にSQLiteデータを保持する

更新前にバックアップが行われ、更新後に復元された場合、どのようにDBをバックアップ/リストアできますか?私がIO(SDカードへのコピーとコピーバック)を使って行うと失敗します。

おそらくデータをxmlにエクスポートして手動で読み込むことを考えています。別の方法がありますか?どのようにそれを行うにはどのような例ですか?

答えて

4

単に新しいテーブルを追加する場合は、onUpgrade()メソッドでDROP TABLEコマンドをコメントアウトしてください。あなたはonUpgrade()のコードの完全な制御を持っているので、それだけで使用できます

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("CREATE TABLE ..."); 
} 

技術的にはあなたも、データベースのバージョンをインクリメントする必要はありません、あなたはdbのコピーへのアクセスを持っていつでもあなたは、CREATE文を実行することができます。

+0

ああ!どのように私はそれを考えなかった!ありがとうございました。しかし、私の質問はまだ成り立ちます。どのようにバックアップしますか?ユーザーがdbをバックアップし、アプリをアンインストールし、新しい更新されたアプリをダウンロードして、バックアップされたファイルをロードすることを決定します。それをどうすれば実現できますか?私は単純なIOコピーがうまくいくとは思わない – Snake

+1

SQLiteデータベースは通常のファイルなので、SDカードや既存のデータベースと同じフォルダにコピーすることができます。 [ここに例があります](http://stackoverflow.com/q/2170031/1267661)。 – Sam

+0

私はあなたの意見を忘れてしまったと思います。私は3つのテーブルを持つバージョン1のデータベースを持っていると言うことができます。 SDカードにコピーしました。ユーザーは4つのテーブルを持つdbのバージョン2にアップグレードしました。今度はSDから元のdbファイルをコピーすると、コードはバージョン2として扱われますが、バージョン1は強制されますが、問題がある場合は、同じテーブルにデータをエクスポートしてインポートする方法が必要です余分なテーブルがありますか? – Snake

関連する問題