[每当我想在空的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数据库。
背景:
为了通过工具测试来测试我的App的某些功能,我拥有一条测试规则,该规则将本地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
文件夹。尽管这不是最优雅的解决方案,但我发现它可以接受测试。
这是按设计方式进行的。
Couchbase将SQLite创建的数据库目录的存在视为该数据库存在的证据。删除文件夹的内容不是合理的事情。如您在编辑中所指出的,要删除数据库,应删除目录及其内容。
更好,使用db.delete()