批量插入 Mysql C++连接器

Batch Insert in Mysql C++ Connector

本文关键字:C++ 连接器 Mysql 插入      更新时间:2023-10-16

我们使用 mysql 连接器进行 c++(官方库(,但是 c++ 库中没有batchupdatebatchinsert方法(尽管在 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();
        }

谢谢

您忘了删除预准备语句 stmt。

https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-prepared-statements.html

注意

您必须使用 delete 显式释放 sql::P reparedStatement 和 sql::Connection 对象。