SQLite3错误无法打开数据库文件

时间:2015-06-12 15:51:39

标签: c++ linux sqlite

我之前已经在每个网站上研究过这个问题,但是当我的守护程序试图打开我正在创建的数据库时,我得到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”'。

之后也是如此。

1 个答案:

答案 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;
}