【问题标题】:ODB: create a db success but db file no existODB:创建数据库成功但数据库文件不存在
【发布时间】:2016-06-30 06:09:05
【问题描述】:

我尝试新建一个 ODB 数据库,但是,有时即使我 new db 成功,xxx.db 也不存在。 使用下面的代码,它无法捕获异常,但是可以输入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");
    }

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

【问题讨论】:

    标签: database sqlite c++11 odb


    【解决方案1】:

    documentationSQLITE_OPEN_CREATE 表示:

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

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

    【讨论】:

    • 你的意思是我们有可能在内存中创建了一个空数据库,它在写入某些内容之前不会作为文件存在?
    • 这就是我写的。
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    相关资源
    最近更新 更多