Принудительное создание базы данных Couchbase Lite 2.6 - PullRequest
1 голос
/ 30 января 2020

Всякий раз, когда я хочу открыть свою базу данных Couchbase lite в пустой папке data/com.my.app/files/databaseName.cblite2, то есть:

DatabaseConfiguration config = new DatabaseConfiguration();
database = new Database(databaseName, config);

, я получаю следующую ошибку:

CouchbaseLiteException{CouchbaseLite,21,'file/data is not in the requested format'}

Как мне применить это новая база данных создана вместо? Поэтому в случае успешной загрузки я хотел бы получить старую базу данных, а в случае повреждения данных (ошибка 21) я хотел бы получить новую базу данных Couchbase.

Справочная информация:

Чтобы протестировать некоторые функциональные возможности моего приложения с помощью инструментальных тестов, у меня есть правило тестирования, которое перемещает локальные файлы Couchbase db.sqlite3, db.sqlite3-shm и db.sqlite3-wal в какое-либо резервное хранилище (@Before) и восстанавливает исходная база данных после теста (@After).

К сожалению, когда база данных пуста, я получаю указанное выше исключение с кодом 21, что в соответствии с Couchbase Documentation означает, что база данных существует, но имеет неправильный формат.

Когда я проверяю структуру папок в Android Studio 'Device File Explorer', я вижу, что загрузка завершается успешно, если папка data/com.my.app/files/databaseName.cblite2 содержит файл db.sqlite3 или если он полностью отсутствует. Однако, если папка пуста, исключение выдается.

Когда я вручную удаляю папку, устанавливая точку останова, тест работает просто отлично. Есть ли способ принудительного создания базы данных?

Редактировать:

Поскольку удаление папки вручную предотвращает ошибку, мой обходной путь - удалить databaseName.cblite2 папка из файловой системы, если она пуста. Хотя это не самое элегантное решение, я нашел его приемлемым для тестирования.

1 Ответ

1 голос
/ 05 февраля 2020

Это ведет себя так, как задумано.

Couchbase рассматривает наличие созданного SQLite каталога базы данных как доказательство того, что база данных существует. Удаление содержимого папки не является разумной вещью. Чтобы удалить базу данных, вы должны, как вы отметили в своем редактировании, удалить каталог и его содержимое.

Еще лучше, используйте db.delete()

...