ODB: создать базу данных успешно, но файл базы данных не существует

Я пытаюсь создать новую базу данных ODB, однако иногда 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");
    }

Я понятия не имею, что происходит, кто-нибудь может мне помочь? Заранее спасибо!

1 ответ

Документация для SQLITE_OPEN_CREATE говорит:

База данных... создается, если она еще не существует.

Файл базы данных записывается только тогда, когда это действительно необходимо (чтобы можно было задавать такие параметры, как размер страницы для новой базы данных), поэтому вполне возможно, что для полностью пустой базы данных файла не существует.

Другие вопросы по тегам