Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL错误2006:MySQL服务器已离开(读取通信数据包时出错) 我目前正在开发一个C++项目,它需要连接到局域网上另一台机器上存储的MySQL数据库。_C++_Mysql - Fatal编程技术网

MySQL错误2006:MySQL服务器已离开(读取通信数据包时出错) 我目前正在开发一个C++项目,它需要连接到局域网上另一台机器上存储的MySQL数据库。

MySQL错误2006:MySQL服务器已离开(读取通信数据包时出错) 我目前正在开发一个C++项目,它需要连接到局域网上另一台机器上存储的MySQL数据库。,c++,mysql,C++,Mysql,连接到数据库工作正常,我可以毫无问题地运行一些查询,但是在循环中迭代结果的同一点(在第三次迭代中),数据库连接关闭,我得到的错误是: MySQL server has gone away. 当我检查服务器日志时,我看到: Aborted connection to db <user details> (Got an error reading communication packets) 我正在迭代结果,如下所示: while( this->pRes->next()

连接到数据库工作正常,我可以毫无问题地运行一些查询,但是在循环中迭代结果的同一点(在第三次迭代中),数据库连接关闭,我得到的错误是:

MySQL server has gone away.
当我检查服务器日志时,我看到:

Aborted connection to db <user details> (Got an error reading communication packets)
我正在迭代结果,如下所示:

while( this->pRes->next() ) // pRes is a pointer to a sql::ResultSet instance
{

    ...
这个问题还有其他几个问题,但对他们有效的解决方案对我来说并不成功。以下是问题的链接:

注:

  • 关闭连接并尝试重新打开连接并不能解决问题。调用sql::Connection::reconnect也不起作用

  • 我为变量尝试了几个值,因为不同的帖子建议了不同的值,每次我更改一些内容进行尝试时,我都会重新启动服务器

  • 服务器版本为5.7,MySQL Connector/C++版本为1.1.7

  • 有更多的链接指向人们发布了相同问题的帖子,但一般来说,他们只是对我列出的变量使用不同的值来建议相同的事情(全部尝试,没有任何效果)

  • 托管服务器的机器是Windows10Pro x64,我正在开发的机器也是Windows10x64

  • 我的开发环境是Visual Studio 2015社区

  • 两台机器上都禁用了防火墙,路由器上的相关tcp端口已转发到运行服务器的机器


如果您需要更多信息,请发表评论,我将尽我所能提供。

问题中没有此问题的答案

当我从数据库中读取数据时,我正在创建一个对象的实例,并将结果从数据库传递给对象构造函数,在检查此对象是否是列表中的副本时,如果它是副本,我将调用“delete”,而不是将实例添加到列表中

在对象内部,我做了一些套接字编程,为了保持整洁,在析构函数中调用了“WSACleanup”,正如大家所知,这是在调用“delete”时推断出来的,因此每当发现重复项时,就会依次调用“WSACleanup”,关闭与数据库的连接,从而导致我面临的问题

解决这个问题有两个答案:

  • 将对WSACleanup的调用移动到应用程序生命周期的末尾

  • 每次发现重复项时,重新构建与数据库的整个连接

  • 我选择了解决方案1

    while( this->pRes->next() ) // pRes is a pointer to a sql::ResultSet instance
    {
    
        ...