C++ 无法在SQLite中设置用户\u版本

C++ 无法在SQLite中设置用户\u版本,c++,database,sqlite,C++,Database,Sqlite,我正在尝试使用SQLite数据库的用户版本特性。我无法实际设置用户的版本,我不知道为什么。我尝试了各种方式执行查询以更新用户版本,并在网上进行了大量搜索,现在完全不知所措 这是我的查询字符串 const std::string kSetUserVersion = "PRAGMA user_version = 1;"; 这里是我试图设置用户版本的地方,但是我的结果仍然是0 // Set the user version and check it is correct. sqlite3_exe

我正在尝试使用SQLite数据库的用户版本特性。我无法实际设置用户的版本,我不知道为什么。我尝试了各种方式执行查询以更新用户版本,并在网上进行了大量搜索,现在完全不知所措

这是我的查询字符串

const std::string kSetUserVersion = "PRAGMA user_version = 1;";
这里是我试图设置用户版本的地方,但是我的结果仍然是0

 // Set the user version and check it is correct.
 sqlite3_exec(dbConnection->db_handle, kSetUserVersion.c_str(), nullptr, nullptr, &db_err);   // <-- this is not working!
 long currentVersion = sqlite3_exec(dbConnection->db_handle, kGetUserVersion.c_str(), nullptr, nullptr, &db_err);

 // If the PRAGMA statement fails, no error returns and it fails silently, so having to add check to see if it has worked.
 if (currentVersion != 1)   // Setting the user_version has failed.
 {
    throw DatabaseAccessException(sqlite3_errmsg(dbConnection->db_handle));
 }
//设置用户版本并检查其是否正确。
sqlite3_exec(dbConnection->db_handle,kSetUserVersion.c_str(),nullptr,nullptr,&db_err);//db_handle、kGetUserVersion.c_str()、nullptr、nullptr和db_err);
//如果PRAGMA语句失败,则不会返回错误,并且会以静默方式失败,因此必须添加检查以查看它是否工作。
if(currentVersion!=1)//设置用户版本失败。
{
抛出DatabaseAccessException(sqlite3_errmsg(dbConnection->db_handle));
}
非常感谢您的帮助。

sqlite3\u exec()
返回值是一个状态/错误代码,而不是查询中的值

要获取查询结果值,有两个主要选项:

  • 使用
    sqlite3\u prepare\u v2()
    sqlite\u step()
    for
    sqlite\u ROW
    访问数据,例如使用
    sqlite3\u column\u int()
    ,使用
    sqlite3\u finalize()
    完成准备好的查询

  • 将回调函数作为第三个参数提供给
    sqlite3\u exec()
    ,以捕获值。例如,参见此处:


  • 函数不返回查询结果,您必须使用回调来获取返回的结果数据。您是要设置
    user\u version
    还是要查询它?两者都要。在这种情况下,理想情况下我想做的就是设置它,但是我目前也在查询它,看看我是否成功地设置了它。不过,我最终需要在别处查询,以检查数据库是否有更新。谢谢您的帮助。现在看来这很明显!但是,我不熟悉如何使用回调返回用户_版本?为了将来参考,用户_版本仅在创建任何表或更改数据库之前设置时才起作用。谢谢你的帮助。