如何在C++中将变量插入char*类型的SQL字符串?
C++实现SQL语句动态值替换的几种方法
你需要把代码里add_data调用的固定VALUES替换成循环里的i、max_size和time,下面给你几种实用的实现方式:
1. 用std::stringstream(兼容C++11及以上)
这是C++里兼容性最好、用得最多的写法,步骤清晰:
首先要包含头文件<sstream>,然后在循环里替换原有的add_data调用:
#include <sstream> // 循环内的代码替换成: std::stringstream sql_builder; sql_builder << "INSERT INTO ReSorts (idSort, idSizeAr, durSort_ms) VALUES(" << i << ", " << max_size << ", " << time << ");"; add_data(sql_builder.str().c_str()); // 如果add_data接受const char*类型,就转成c_str()
2. 用C++20的std::format(写法最简洁)
如果你的编译器支持C++20,这种写法和C#的字符串插值几乎一样,非常直观:
需要包含头文件<format>,然后这样写:
#include <format> // 循环内的代码替换成: std::string sql_str = std::format( "INSERT INTO ReSorts (idSort, idSizeAr, durSort_ms) VALUES({}, {}, {});", i, max_size, time ); add_data(sql_str.c_str());
3. 直接字符串拼接(不推荐,可读性差)
用std::string的+操作符硬拼也行,但代码看起来很乱,除非特殊情况不建议用:
std::string sql_str = "INSERT INTO ReSorts (idSort, idSizeAr, durSort_ms) VALUES(" + std::to_string(i) + ", " + std::to_string(max_size) + ", " + std::to_string(time) + ");"; add_data(sql_str.c_str());
额外提醒
- 直接拼字符串生成SQL有SQL注入风险,如果这些值是用户输入的,最好用数据库API提供的参数化查询(预处理语句),别直接拼。
- 你原代码里最后一行
temp.closeBd()写错了,temp是指针,应该用temp->closeBd(),不然编译会报错。
内容的提问来源于stack exchange,提问作者innit_slawyan
相关产品推荐
相关产品推荐

