1

我尝试新建一个 ODB 数据库,但是,有时即使我db 成功xxx.db也不存在。new使用下面的代码,它无法捕获异常,但是可以进入if(!_file)

string dbFile = getPalBundle()->getFileStorageProvider()->getDocumentsPath(userId + "/xxx.db");

  auto db = std::shared_ptr<odb::sqlite::database>(new odb::sqlite::database(dbFile, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_FULLMUTEX, false));


    if(db == nullptr)
    {
        ret = false;
    }

    // check database avalible
    try {
        db->schema_version();
    } catch (...) {
        DLOG(kTagDaoFactory, "Datase file damaged, logout");
        ret = false;
    }

    fstream _file;
    _file.open(dbFile, ios::in);
    if (!_file) {
        ret = false;
        DLOG(kTagDaoFactory, "Data base file no exist, logout");
    }

我不知道会发生什么,有人可以帮助我吗?提前致谢!

4

1 回答 1

0

文档SQLITE_OPEN_CREATE说:

如果数据库尚不存在,则创建该数据库。

仅在实际需要时才写入数据库文件(以允许设置新数据库的页面大小等参数),因此对于完全空的数据库,可能没有文件。

于 2016-06-30T07:37:26.127 回答