C++ 使用特定值创建特定格式的char*
我试图使用程序其他区域给出的值,以特定格式创建char*类型,values()括号内的值是程序给出的值。 格式应如下所示:C++ 使用特定值创建特定格式的char*,c++,sqlite,type-conversion,C++,Sqlite,Type Conversion,我试图使用程序其他区域给出的值,以特定格式创建char*类型,values()括号内的值是程序给出的值。 格式应如下所示: char* sql = "INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) " \ "VALUES ('title','description','duration','r
char* sql = "INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) " \
"VALUES ('title','description','duration','recurtype','startfrom','endingtype','dateend',occurences,venueid); "
如您所见,文本值必须在“”标点符号内,而int值是单独存在的,因此通常的命令可能如下所示:
"INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) " \
"VALUES ('thetitle','thedesc','theduration','recurtype','startfrom','enddddtype','dateend',2,4); ";
下面给出了需要执行此操作的函数,并不是说这一切都很重要,而是为了解释,它将事件(类)数据全部转换为string/int值,以便它们可以用于形成INSERT命令(这是问题所在),然后在完成此操作(并验证记录的可用性)后在数据库上执行将其添加到向量中,并关闭数据库
void addRecEvent(newRecurringEvent event, vector <newRecurringEvent> &events){
sqlite3 *db;
int rc;
char *sql;
int tableCheck;
char *zErrMsg = 0;
rc = sqlite3_open("data.sqlite", &db);
string title = event.getTitle();
string description = event.getDescription();
string duration = to_string(event.getDuration());
string recurType = recToString(event.getRecurType());
string startfrom = to_string( event.getStartFrom());
string endingtype = etypeToStr(event.getEndingType());
string dateend = to_string(event.getDateEnd());
int occurences = event.getOccurences();
int venueid = event.getVenuid();
/*CREATE INSERT COMMAND USING char*sql IN FORMAT REQUIRED*/
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //execute the command
if (rc != SQLITE_OK){
cout << stderr << "SQL error: %s \n", zErrMsg;
}
else{
cout << stdout << "Records created succesfully";
events.push_back(event);
}
sqlite3_close(db);
}
void addRecEvent(newRecurringEvent事件、向量和事件){
sqlite3*db;
int rc;
char*sql;
int表格检查;
char*zErrMsg=0;
rc=sqlite3_open(“data.sqlite”,&db);
字符串title=event.getTitle();
string description=event.getDescription();
string duration=to_string(event.getDuration());
string recurType=recostring(event.getRecurType());
string startfrom=to_string(event.getStartFrom());
字符串endingtype=etypeToStr(event.getEndingType());
字符串dateend=to_字符串(event.getDateEnd());
int occurrences=event.getoccurrences();
int venueid=event.getVenuid();
/*使用char*sql以所需格式创建INSERT命令*/
rc=sqlite3_exec(db、sql、callback、0和zErrMsg);//执行命令
如果(rc!=SQLITE_OK){
如果whozcraig留下的评论解决了我的问题,我必须使用一个准备好的语句将我的值提供给该语句使用a并根据它们的类型绑定动态参数,然后执行该语句。绑定器会整理如何处理数据,更重要的是,安全地生成语句并避免sql注入风险is是支持它的sql后端的通用首选项(大多数都是这样,包括sqlite)。您不能以特定格式创建char*
;由编译器决定如何表示char*
。您的问题是关于char
的数组,它与指向char
的指针不同。