Заменить базу данных резервной копией из дропбокса

Я пытаюсь создать резервную копию версии моей базы данных в Dropbox. Все работает нормально, загружая файл в дропбокс, но у меня возникают проблемы с заменой файла, который в данный момент находится на телефоне, на тот, который находится в дропбоксе.

    new Thread(new Runnable() {
        public void run() {
            File file = new File(getDatabasePath("my_database").getPath());
            file.getParentFile().mkdirs();

            try {
                FileOutputStream outputStream = new FileOutputStream(file);
                DropboxFileInfo info =dbInstance.getFile("/BackupFolder/my_database", null,
                        outputStream, null);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }).start();

Когда операция завершается, я получаю много ошибок «SQLiteException: нет такой таблицы». Я проверил правильность базы данных в Dropbox.

01-09 20:03:37.601: W/System.err(7185): android.database.sqlite.SQLiteException: no such table: transaction_table (code 1)
at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
01-09 20:03:37.601: W/System.err(7185): at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:1036)
01-09 20:03:37.601: W/System.err(7185):     at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
01-09 20:03:37.601: W/System.err(7185):     at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
01-09 20:03:37.601: W/System.err(7185):     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
01-09 20:03:37.601: W/System.err(7185):     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
01-09 20:03:37.601: W/System.err(7185):     at android.content.ContentResolver.query(ContentResolver.java:436)
01-09 20:03:37.601: W/System.err(7185):     at android.content.ContentResolver.query(ContentResolver.java:360)

ОБНОВЛЕНИЕ

Я загрузил файл в другое место на устройстве, чтобы просмотреть его с помощью sqlite3, и все там. Итак, очевидно, загрузка работает правильно, но я не могу перезаписать существующую базу данных во время выполнения этим файлом.


person DroidT    schedule 10.01.2014    source источник
comment
Пожалуйста, добавьте свое исключение.   -  person Mahmoud    schedule 10.01.2014
comment
Я добавил одно из исключений, которые я получаю при выполнении запроса.   -  person DroidT    schedule 10.01.2014
comment
Проверьте имя и расположение вашей базы данных. И проверьте, существует ли файл базы данных или нет. И распечатайте размер файла, это будет полезная информация.   -  person Mahmoud    schedule 10.01.2014
comment
Я обновил свой ответ новыми выводами.   -  person DroidT    schedule 10.01.2014
comment
в этом ответе я объясняю безопасный способ копирования файлов sqlite в папку данных приложения и использования его в качестве основной базы данных stackoverflow.com/questions/21101515/   -  person Carlos Robles    schedule 23.01.2014


Ответы (1)


Попробуйте закрыть все соединения с базой данных перед перезаписью базы данных.

Вы можете:

  • Закройте соединение со старой базой данных.
  • Удалить старый файл базы данных.
  • Переместите или скопируйте новую базу данных.
  • Создайте новое подключение к новой базе данных.
person Mahmoud    schedule 10.01.2014