我需要将MySQL命令与程序提供的C ++变量嵌入,以创建查询并提交。
我有以下内容:
int source, temperature, humidity, airCo, noise;
char query[500];
尝试#1:
sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), " +
temperature + ", " +
humidity + ", " +
airCo + ", " +
noise + ")";
尝试#2:
sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), %i, %i, %i, %i)",
temperature,
humidity,
airCo,
noise );
尝试#3:
sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), %s, %s, %s, %s)",
std::to_string(temperature),
std::to_string(humidity),
std::to_string(airCo),
std::to_string(noise));
...... aaaaa和没人工作。
互联网上的教程基本上围绕着我上面尝试的内容。我该怎么做?
答案 0 :(得分:2)
一般提示,在提供表名时,请使用反向标记`tablename`
来避免关键字冲突。将字符串字段值放在引号'stringvalue'
中。
对于sql查询,我通常使用std::ostringstream
,因为它会自动将数字转换为字符串。
#include <sstream>
int main()
{
int source, temperature, humidity, airCo, noise;
// ... such and so forth ...
std::ostringstream sql;
sql << "insert into `defaultsensor1`";
sql << " (`dateTime`, `temperature`, `humidity`, `airCo`, `noise`)";
sql << " value ";
sql << "(now(), " << temperature << ", " << humidity << ", " << airCo << ", " << noise << ")";
std::cout << "sql: " << sql.str().c_str() << '\n';
}
注意:该字符串是使用std::ostringstream
从sql.str().c_str()
中提取的,以便传递给MySQL API
次来电。
例如
res = stmt->executeQuery(sql.str().c_str());
将std::ostringstream
转换为std::string
,然后转换为呼叫所需的const char*
。