sqlite 在SQL查询中将字符串变量作为表名传递[已关闭]

dphi5xsq  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(173)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受答案。

这个问题是由打字错误或不能再复制的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式对未来的读者不太可能有帮助。
上个月关门了。
Improve this question
我的程序接受一个字符串作为参数,并尝试使用传递的字符串参数作为表名在SQL数据库中创建表。
我有使用SQL的经验,但在用C++实现它时我还是个新手。

class logger {
public:
    string name;                //name of application to be logged
    
    logger(string app) {
        //open data base and get handle for future queries 
        
        name = app;
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        char *sql;

        rc = sqlite3_open("@name", &db);
    
        if( rc ){
            fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
            sqlite3_close(db);
        }

        sql = "create table if not exists" + name + "(timestamp varchar(255), message varchar(255));"
        
        rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
        
        if( rc != SQLITE_OK ){
            fprintf(stderr, "SQL error: %s\n", zErrMsg);
            sqlite3_free(zErrMsg);
        } else {
            fprintf(stdout, "Table created successfully\n");
        }
        
        sqlite3_close(db);
    }
};

错误:

logger.cpp:29:52: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘char*’ in assignment
   29 |         sql = "create table if not exists " + name + "(timestamp varchar(255), message varchar(255));"
      |               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                    |
      |                                                    std::__cxx11::basic_string<char>
dgsult0t

dgsult0t1#

不能像构建C++std::string那样构建C字符串。
相反,将sql设置为std::string,构建字符串,然后使用其c_str()方法从其中获取C字符串指针。

string sql;
...
rc = sqlite3_exec(db, sql.c_str(), callback, 0, &zErrMsg);

相关问题