我尝试新建一个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");
}
我不知道会发生什么,有人可以帮助我吗?提前谢谢!
答案 0 :(得分:0)
SQLITE_OPEN_CREATE
的{{3}}说:
如果数据库尚不存在,则创建数据库。
仅在实际需要时才写入数据库文件(以允许设置新数据库的页面大小等参数),因此对于完全空的数据库,可能没有文件。