SQLite更新表

时间:2017-03-14 19:47:48

标签: c++ sqlite

尝试按用户指定的值更新表。但价值观没有得到更新。

cout<<"\nEnter Ac No"<<endl;
        cin>>ac;
        cout<<"\nEnter Amount"<<endl;
        cin>>amt;

        /* Create merged SQL statement */
        sql = "UPDATE RECORDS set BAL = '%d' where ACCOUNT_NO = '%d'",amt, ac;

        /* Execute SQL statement */
        rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

如果我将BAL和ACCOUNT_NO替换为某个整数值而不是占位符,那么它工作正常。

1 个答案:

答案 0 :(得分:-1)

您的sql字符串未正确创建。

如果您期望此代码 sql = "UPDATE RECORDS set BAL = '%d' where ACCOUNT_NO = '%d'",amt, ac; 以导致 "UPDATE RECORDS set BAL = '1' where ACCOUNT_NO = '2'" 哪里 amt = 1和ac = 2然后你需要使用这样的字符串格式化调用。

 // the buffer where your sql statement will live
char sql[1024];
 // write the SQL statment with values into the buffer
_snprintf(sql,sizeof(sql)-1, "UPDATE RECORDS set BAL = '%d' where ACCOUNT_NO = '%d'",amt, ac);
buff[sizeof(sql)-1]='\0'; 

在您的特定平台_snprintf(...)上可能是snprintf(..)或其他类似名称的功能。您的编译器也可能会警告缓冲区操作安全漏洞。根据需要选择合适的替代品