Как восстановить базу данных номеров, которую я экспортировал? - PullRequest
0 голосов
/ 27 марта 2020

В моем приложении мне нужно реализовать восстановление базы данных комнаты, которую я экспортировал в локальное хранилище. Мне удалось скопировать все 03 файлы базы данных (.db -shm и wal), используя get getDatabasePath (DATABASE_NAME) .getAbsolutePath (). Чтобы заменить его обратно, я копирую эти экспортированные файлы обратно в исходный путь к базе данных, который работает нормально, но никакие данные не отображаются, когда я получаю к нему доступ из приложения. Экспортированная база данных четко показывает всю таблицу с помощью инструмента DB Browser. Я не уверен, почему он не работает. Это кнопка резервного копирования, которая создает файлы резервных копий. Я не уверен, что я ошибаюсь или что-то не так в моем коде.

backpathbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          String currentDBPath =
            getDatabasePath(DATABASE_NAME).getAbsolutePath();
    String backupDBPath = "my_db";
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();
    String rot = Environment.getExternalStorageDirectory().toString();
    File currentDB = new File(currentDBPath);
    File backupDB = new File(sd, backupDBPath);

    if (currentDB.exists()) {
        try {
            db.close();
            FileChannel src = new FileInputStream(currentDB).getChannel();
            FileChannel dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
            backupDB = new File(sd, backupDBPath+"-shm");
            src = new FileInputStream(currentDB+"-shm").getChannel();
            dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
            backupDB = new File(sd, backupDBPath+"-wal");
            src = new FileInputStream(currentDB+"-wal").getChannel();
            dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();}

            catch (IOException e) {
            e.printStackTrace();

        }}} });

Вот кнопка восстановления

restorebutton.setOnClickListener(v -> {
            db.close();
            String back=
                    getDatabasePath(DATABASE_NAME).getAbsolutePath();
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();
            String current = "my_db";
            String currentsh = "my_db-shm";
            String currentwl = "my_db-wal";      
            String filepath= sd+"/"+current;
            String shmfile= sd+"/"+currentsh;
            String currenwl= sd+"/"+currentwl;
            File dest=new File(back);
            Log.d(TAG, "Following files are in absolute path " + dest.list()); // returning null

            try {
                copyFile(filepath,dest);
                copyFile(shmfile,dest);
                copyFile(currenwl,dest);
                Log.d(TAG, "Copied Sucessfully "); // it Copies without error
               } 
                catch (IOException e) {
                e.printStackTrace();
            }
        });
}

Вот моя функция копирования файла

  public  void copyFile(String src, File dst) throws IOException
{

    FileChannel inChannel = new FileInputStream(String.valueOf(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();
    }
}

После возврата к моей основной деятельности восстановленные данные не отображаются, даже после закрытия и повторного открытия приложения.

...