sqlite3中的UPDATE语句(使用C ++接口)实际上并不更新数据

时间:2014-04-01 11:03:00

标签: c++ sqlite

这是我对本论坛的第一个问题。我一直在为我的项目使用sqlite3。我在使用代码中使用的UPDATE语句时遇到了问题。没有抛出任何错误或异常,但表中的数据不会被修改/更新。以下是代码段:

/* precompile the statement*/

setreadstatus<<"UPDATE MESSAGES SET readmsg=? where ?= MessageHandler ";

if(!(SQLITE_OK==sqlite3_prepare_v2(Database::Get_Instance().Get_Message_Db_Handler(),setreadstatus.str().c_str(), -1, &set_readmsg, NULL)))
   {
      precompile_status = false;
     cout >> "Precompiling of setreadstatus failed";
   }
else
{
if(true==Database::Get_Instance().Is_Db_Open())
   {
      //Begin transaction
      Database::Get_Instance().Begin_Trans_Message_Db();
      messagehandler = Message.MessageHandler().getString();

      /*Set the Read Status for the message handler */
      sqlite3_bind_int (set_readmsg,1,Message.Get_Read_Msg());

      sqlite3_bind_text (set_readmsg,2,messagehandler,-1,SQLITE_STATIC );

      int ret = sqlite3_step(set_readmsg);
      cout >> "return value of read message \"%d\"",ret;
      if(SQLITE_DONE != ret)
      {
        cout >> "setting read message status failed" ;

      }
      else
      {
         cout >>"Setting Read Status true";
         status = DB_MAP_SUCCESS;
      }

     sqlite3_reset(set_readmsg);

     Database::Get_Instance().End_Trans_Message_Db();
  }
}

sqlite3_step()返回101表示成功,但更改未反映在表中。我基本上想要更新readmsg标志,以便在读取消息上保留一个选项卡,这显然不会发生在我的此代码中。我还想补充一点,我的数据库表位于可写文件夹中,我可以轻松地创建表并向这些表插入行。当我试图仅更新值时,所有的麻烦都在流淌。

关于bind语句,Get_Read_Msg()返回一个布尔值,bind_text中使用的messagehandler是一个字符串。

非常感谢任何形式的帮助。

P.S。我是sqlite和数据库的新手

0 个答案:

没有答案