Восстановите и удалите старую базу данных SQLite с новой базой данных SQLite в android - PullRequest
0 голосов
/ 21 апреля 2020

Я разрабатываю приложение, в котором мне нужно сделать резервную копию и восстановить базу данных. Я написал код для резервного копирования, и он работает, но я хочу восстановить резервную копию базы данных в моем приложении и удалить ту, которая там уже есть. Пожалуйста, предоставьте решение для некорневых android устройств. Спасибо! Мой резервный код:

private void exportDB(){
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();
    FileChannel source=null;
    FileChannel destination=null;
    String currentDBPath = "/data/"+getPackageName()+"/databases/"+DatabaseHelper.DATABASE_NAME;
    String backupDBPath = "abcrecord.db";
    File currentDB = new File(data, currentDBPath);
    File backupDB = new File(sd, backupDBPath);
    try {
        source = new FileInputStream(currentDB).getChannel();
        destination = new FileOutputStream(backupDB).getChannel();
        destination.transferFrom(source, 0, source.size());
        source.close();
        destination.close();
        Toast.makeText(this, "DB Exported!", Toast.LENGTH_LONG).show();
    } catch(IOException e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 21 апреля 2020

Ваш код показывает, что вы можете сделать резервную копию вашей базы данных. Поэтому для восстановления этой базы данных мы переключаем исходный и целевой файлы, как показано ниже:

private void RestoreDB(){
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();
    FileChannel source=null;
    FileChannel destination=null;
    String currentDBPath = "/data/"+getPackageName()+"/databases/"+DatabaseHelper.DATABASE_NAME;
    String backupDBPath = "abcrecord.db";
    File currentDB = new File(data, currentDBPath);
    File backupDB = new File(sd, backupDBPath);
    try {
        source = new FileInputStream(backupDB).getChannel();
        destination = new FileOutputStream(currentDB).getChannel();
        destination.transferFrom(source, 0, source.size());
        source.close();
        destination.close();
        Toast.makeText(this, "DB restored!", Toast.LENGTH_LONG).show();
        backupDB.delete(); //for deleting the backup database after restoring
    } catch(IOException e) {
        e.printStackTrace();
    }
}
...