这是我对本论坛的第一个问题。我一直在为我的项目使用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和数据库的新手