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

标签 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",但即使在运行 'find/-name "product.db"' 之后,我也无法在系统上的任何位置找到 .db 文件。

最佳答案

将上面的代码更改为下面的代码可以按照@Colonel 32 修复问题。我仍在研究为什么 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;
}

关于c++ - SQLite3 错误无法打开数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30807293/

相关文章:

python - 如何按照Unix Shell或任何其他配置文件中提到的位置添加空值

sqlite - 在黑莓中切换类时丢失数据

php - Laravel Sqlite 数据库无法连接

android - 为什么在使用列名创建 View 时出现语法错误?

c++ - 按位非运算哪个更快 : precalculated table or `~`

c++ - 如何将 int 转换为 LPARAM c/c++?

linux - 下载完成后,传输守护程序启动程序

C++ 我的第一个模板

c++ - LLVM 异常;如何放松

linux - 执行单个命令时 Bash 'swallowing' 子 shell 子进程