【问题标题】:Force creation of Couchbase Lite 2.6 database强制创建 Couchbase Lite 2.6 数据库
【发布时间】: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.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】:

    这是按设计运行的。

    Couchbase 将 SQLite 创建的数据库目录的存在视为数据库存在的证据。删除文件夹的内容是不合理的做法。要删除数据库,您应该按照您在编辑中的说明,删除目录及其内容。

    更好的是,使用db.delete()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多