c++ - Mysql C++ 连接器中的批量插入
问题描述
我们使用 mysql connector for c++(官方库),但是 c++ 库中没有batchupdate
或batchinsert
方法(尽管在 java 中这些方法确实存在)。
为了做到这一点,我尝试了类似下面的方法并且它奏效了。但是在这种情况下,如果我们每分钟插入数千行数据,大约 30 分钟 mysql 会消耗掉我们计算机中的所有内存(它有 32G 内存)。
这种用法有错吗,如果有,我们该怎么办?(我们循环运行下面的代码):
try {
//autoClose parameter is false in our case
if (!autoClose) {
con->setAutoCommit(false);
}
stmt = con->prepareStatement(queryBuilder);
this->setPreparedStatements(insertData);
result = stmt->executeUpdate();
stmt->close();
if (getAutoGeneratedKey) {
std::string lastIdQuery = "SELECT LAST_INSERT_ID()";
stmt = con->prepareStatement(lastIdQuery);
ResultSet *rs = stmt->executeQuery();
while (rs->next()) {
result = rs->getInt(1);
}
rs->close();
delete rs;
stmt->close();
}
if (autoClose) { //autoClose parameter is false in our case
con->close();
}
谢谢
解决方案
您忘记删除 Prepared Statement stmt。
https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-prepared-statements.html
笔记
您必须使用 delete 显式释放 sql::PreparedStatement 和 sql::Connection 对象。
推荐阅读
- java - 将日期从 java 传递到 ireports 时出现异常
- sql - 如何获取按月排序的数据
- javascript - 为什么不能设置null显示的属性innerhtml
- .net - 此主机上安装了哪个 .NET 版本?
- keras - 在 Keras 中,在模型中使用 Lambda 时无法保存模型检查点。报错 ValueError: can only convert a array of size 1 to a Python scalar
- jquery - 单击复选框时禁用和启用 Jquery Button
- java - Kotlin 生成私有字段:@MyAnnotation 字段不能是私有或静态的
- javascript - 如何处理从父 Promise 链返回的具有各种可能结果的 Promise
- sql - 如何在oracle sql developer中获取用户的FID
- javascript - 如何在运行时跟踪 DIV 的子元素计数?