ODB:创建数据库成功但db文件不存在

时间:2016-06-30 06:09:05

标签: database sqlite c++11 odb

我尝试新建一个ODB数据库,但是,有时,即使我xxx.db 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");
    }

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

1 个答案:

答案 0 :(得分:0)

SQLITE_OPEN_CREATE的{​​{3}}说:

  

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

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