バックアップと復元機能を備えたアプリがあります。ボタンをクリックしてバックアップすると、dbファイルが外部ストレージにコピーされます。復元ボタンをクリックすると、ファイルが外部ストレージ(存在する場合)から取得され、アプリにコピーされ、既存のデータベースがバックアップデータベースファイルで上書きされます。
テーブルで更新を実行すると、この問題が発生しました。テーブルがデータで更新された後、更新されたデータを含むデータベースが外部ストレージにコピーされないか、更新が行われた後に復元しようとすると、ファイルがコピーされません。
アイテムが保存されると、dbが開かれ、次の関数が呼び出されて更新が実行され、dbが閉じられます。
public void saveItem(int ItemID, int ItemNumber, String itemnote)
{
ContentValues args = new ContentValues();
args.put("ItemNote", itemnote);
mDb.update("Items", args, "ItemID =" + Item+" and ItemNumber ="+ItemNumber, null);
}
更新が発生した後、dbファイルがコピーされない原因は何ですか?
次のコードを使用して、dbバックアップをアプリにインポートしています。繰り返しますが、これはすべて、更新ステートメントが実行される前に機能します。前もって感謝します。
importdb.setOnClickListener(new View.OnClickListener(){public void onClick(View arg0){
final File DATA_DIRECTORY_DATABASE = getDatabasePath("MyDB");
final File DATABASE_DIRECTORY = new File(Environment.getExternalStorageDirectory(),"/MyApp");
final File IMPORT_FILE = new File(DATABASE_DIRECTORY,"MyDB");
File exportFile = DATA_DIRECTORY_DATABASE;
File importFile = IMPORT_FILE;
try {
exportFile.createNewFile();
copyFile(importFile, exportFile);
Log.i("Import", "Succesfull");
} catch (IOException e) {
e.printStackTrace();
}
}
});
private static void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}