【发布时间】:2020-01-30 15:47:02
【问题描述】:
每当我想在一个空的 data/com.my.app/files/databaseName.cblite2 文件夹上打开我的 Couchbase lite 数据库时,即:
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 的“设备文件资源管理器”中检查文件夹结构时,我发现如果文件夹 data/com.my.app/files/databaseName.cblite2 包含 db.sqlite3 文件或完全丢失,则加载成功。但是,如果文件夹为空,则会抛出异常。
当我通过设置断点手动删除文件夹时,测试工作正常。 有没有办法强制创建数据库?
编辑:
由于手动删除文件夹可以防止错误,我的解决方法是从文件系统中删除 databaseName.cblite2 文件夹以防它为空。虽然这不是我认为可以接受测试的最优雅的解决方案。
【问题讨论】: