【问题标题】:Batch Insert in Mysql C++ ConnectorMysql C++ 连接器中的批量插入
【发布时间】:2019-06-19 14:01:36
【问题描述】:

我们使用 mysql connector for 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();
        }

谢谢

【问题讨论】:

    标签: c++ mysql libmysql


    【解决方案1】:

    您忘记删除 Prepared Statement stmt。

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

    注意

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2013-06-07
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多