在Mysql C ++连接器中批量插入

时间:2019-06-19 14:01:36

标签: c++ mysql libmysql

我们将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();
        }

谢谢

1 个答案:

答案 0 :(得分:0)

您忘记删除准备语句stmt。

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

注意

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