0

編集: 私のデータベースには 2 つのテーブルがあります。1 つのテーブルは、更新後に保存および復元する必要があるユーザー データです。もう 1 つのテーブルは、更新のたびに assets フォルダーから読み込まれる定数データです。

したがって、データベースをアップグレードするときは、最初にテーブル 1 を外部データベースに保存します。次に、「定数」テーブルを使用してデータベースを上書きしcopyDataBase();、保存したテーブルをコピーして戻します。

データベースをコピーする前に、データベースを閉じる必要があります。そうしないと、データが奇妙になります。私はいつも

close() was never explicitly called on database '/data/data/com.myproject/databases/mdb.sqlite' 

openOrCreateDatabase が呼び出される場所。私は前に近いと呼んだので、それは奇妙です。私に何ができる?

public void onUpgrade(SQLiteDatabase db,
        int oldVersion, int newVersion) {

//save db tables to other db ...

db.close(); 
copyDataBase();
db = SQLiteDatabase.openOrCreateDatabase(databaseFile, null);

//... save back to db
}

ありがとうEuribor

4

1 に答える 1

0

実行中は、開いているデータベースを閉じないことを強くお勧めしますonUpgrade。あなたは多くの問題を引き起こす賢明な行動を妨害しています!

データベースがアップグレードされたかどうかを確認し、バックアップ/コピーを実行するには、他のメカニズムを検討する必要があります。

編集

アセット フォルダーのテーブルを 1 つだけ置き換えたい場合は、SD カードにデータベースをコピーし、接続を開き、内部のテーブル コンテンツをアセット データベースのテーブル コンテンツに置き換えてみませんか? これは、内部データベースを閉じずに onUpgrade で実行できます。

単一のテーブルを置換/更新するためだけに、データベース ファイルをコピーしないでください。

于 2012-11-29T14:57:42.907 に答える