gpt4 book ai didi

C++ 插入MySQl数据库

转载 作者:行者123 更新时间:2023-11-29 18:27:24 26 4
gpt4 key购买 nike

我有一个 C++ 应用程序,并且正在使用 C++ Mysql 连接器 ( https://dev.mysql.com/downloads/connector/cpp/ )

我需要在一个表中保存一些日志。根据时间的不同,我可能会拥有数千个数量级的大量数据(例如,80,000 个)。

我已经实现了一个迭代我的 std::vector<std::string> 的函数并保存std::string到我的数据库。

例如:

std::vector<std::string> lines = explode(filedata, '\n');
for (int i = 0; i < lines.size(); i++)
{
std::vector<std::string> elements = explode(lines[i], ';');
ui64 timestamp = strtol(elements.at(0).c_str(), 0, 10);
std::string pointId = elements.at(6);
std::string pointName = elements.at(5);
std::string data = elements.at(3);

database->SetLogs(timestamp, pointId, pointName, data);
}

日志来自 csv 文件,我将所有字段保存到我的 vector 中。之后,我解析 vector (使用爆炸)并仅获取我需要保存的字段。

但我有一个问题。例如,如果我有 80,000,我将调用我的函数以将 80,000 保存到数据库中。它可以正常工作并正确保存所有数据,但需要花费大量时间。

是否存在某种方法可以保存所有数据,只需调用一次保存函数,而不调用例如 80,000 次,从而优化时间?

编辑1

我将插入代码更改为:

std::string insertLog = "INSERT INTO Logs (timestamp,pointId,pointName,data) VALUES (?,?,?,?)";

pstmt->setString(1, timestampString);
pstmt->setString(2, pointId);
pstmt->setString(3, pointName);
pstmt->setString(4, data);
pstmt->executeUpdate();

最佳答案

您可以更改代码以进行批量插入,而不是一次插入一行。

我建议通过生成一个字符串形式的插入语句并将该字符串传递给mysqlpp::Query来完成此操作。我希望您可以使用准备好的语句以类似的方式进行批量插入。

如果您为每一行执行插入语句(我假设这里使用explode()),我认为客户端和服务器之间的流量会增加,这肯定会减慢速度下来。

编辑

我怀疑函数explode()是否会增加执行时间,因为当您调用explode两次时,您会访问该文件两次。如果您能生成explode() 的代码那就太好了。

关于C++ 插入MySQl数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46051990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com