2016-06-30 5 views
1

Я пытаюсь создать новую базу данных ODB, однако иногда xxx.db не существует даже I new db success. С кодом под землей, он не может поймать исключение, однако, он может ввести if(!_file)ODB: создать db-успех, но db-файл не существует

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"); 
    } 

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

ответ

0

documentation для SQLITE_OPEN_CREATE говорит:

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

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

+0

Вы имеете в виду, что мы можем создать пустую базу данных в памяти, которая не существует в виде файла, пока в нее не будет записано что-то? – yeyimilk

+0

Вот что я написал. –

Смежные вопросы