使用C ++变量插入MySQL命令

时间:2015-09-28 16:18:30

标签: c++ mysql

我需要将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和没人工作。

互联网上的教程基本上围绕着我上面尝试的内容。我该怎么做?

1 个答案:

答案 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::ostringstreamsql.str().c_str()中提取的,以便传递给MySQL API次来电。

例如

res = stmt->executeQuery(sql.str().c_str());

std::ostringstream转换为std::string,然后转换为呼叫所需的const char*