我之前已经在每个网站上研究过这个问题,但是当我的守护程序试图打开我正在创建的数据库时,我得到SQLite3错误无法打开数据库文件。根据我的研究,我已经看到确保创建数据库的文件夹具有正确的权限。守护程序进程以root用户身份运行,该文件夹具有root权限:root为700,我已记录路径以确保其正确且确实如此。以下是我的代码。
#include
<sqlite3.h>
....
bool initializeDB()
{
wstring path = L"/opt/McAfee/myproduct/resource/product.db";
sqlite3* db;
if(sqlite3_open16((void*)path.c_str(), &db) != SQLITE_OK)
{
wstringstream ss;
ss<<L "Could not open db '"<<path<< '. Error: "<<sqlite3_errmsg(db);
LogMsg(false, ss.str().c_str());
sqlite3_close_v2();
return false;
}
// Create table statements
sqlite3_close_v2(db);
return true;
}
我已经尝试对目录执行chmod 777只是为了让它工作,我得到了同样的错误。我也改变了/tmp/product.db的路径,并且也失败了同样的错误。唯一可行的是,如果我只有wstring path = L"product.db"
,但我在系统的任何地方都找不到.db文件,即使在运行'find / -name“product.db”'。
答案 0 :(得分:0)
根据@Colonel Thirty Two将代码从上面改为下面修复了问题。我还在研究为什么sqlite3_open16(),sqlite3_open_v2()或sqlite_close_v2()都不能在CentOS上运行。后者导致停止该过程的不可恢复的错误。
#include <sqlite3.h>
....
bool initializeDB()
{
string path = "/opt/McAfee/myproduct/resource/product.db";
sqlite3* db;
if(sqlite3_open(path.c_str(), &db) != SQLITE_OK)
{
LogMsg(false, L"Could not open db.");
sqlite3_close();
return false;
}
// Create table statements
sqlite3_close(db);
return true;
}