强制创建Couchbase Lite 2.6数据库

问题描述 投票:1回答:1

[每当我想在空的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.sqlite3db.sqlite3-shmdb.sqlite3-wal移动到某个备份位置(@Before)并还原原始测试后的数据库(@After)。

[不幸的是,每当数据库为空时,我都会收到代码21的上述异常,根据Couchbase Documentation,这意味着数据库存在但格式错误。

[当我在Android Studio的“设备文件资源管理器”中检查文件夹结构时,我发现如果文件夹data/com.my.app/files/databaseName.cblite2包含db.sqlite3文件或文件完全丢失,则加载成功。但是,如果文件夹为空,则会引发异常。

当我通过设置断点手动删除文件夹时,该测试工作正常。我可以强制创建数据库吗?

编辑:

由于手动删除文件夹可防止错误,因此我的解决方法是在文件系统为空的情况下从文件系统中删除databaseName.cblite2文件夹。尽管这不是最优雅的解决方案,但我发现它可以接受测试。

android couchbase-lite
1个回答
0
投票

这是按设计方式进行的。

Couchbase将SQLite创建的数据库目录的存在视为该数据库存在的证据。删除文件夹的内容不是合理的事情。如您在编辑中所指出的,要删除数据库,应删除目录及其内容。

更好,使用db.delete()

© www.soinside.com 2019 - 2024. All rights reserved.