Восстановите и удалите старую базу данных SQLite с новой базой данных SQLite в Android

Я разрабатываю приложение, в котором мне нужно создавать резервные копии и восстанавливать базу данных. Я написал код для резервного копирования, и он работает, но я хочу восстановить резервную базу данных в своем приложении и удалить ту, которая там уже присутствует. Пожалуйста, предоставьте решение для нерутированных устройств 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();
    }
}

person Umer Salman    schedule 21.04.2020    source источник


Ответы (1)


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

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();
    }
}
person Namikaze Minato    schedule 21.04.2020
comment
база данных восстановлена, но когда я пытаюсь получить данные, появляется сообщение об ошибке: android.database.sqlite.SQLiteException: нет такой таблицы: table_name - person Umer Salman; 21.04.2020
comment
любое решение для этой проблемы? - person Umer Salman; 21.04.2020
comment
Хорошо. Обязательно добавьте имя таблицы для базы данных. также переустановите приложение - person Namikaze Minato; 21.04.2020
comment
Также попробуйте эту строку как для резервного копирования, так и для восстановления базы данных: String currentDBPath = "//data//your package name//databases//DATABASE_NAME.db" - person Namikaze Minato; 21.04.2020
comment
Теперь база данных не восстанавливается. Я вижу файл резервной копии на своей SD-карте в своем эмуляторе. Но когда я импортировал его, мое приложение выдало ошибку. - person Umer Salman; 21.04.2020