Mysql c ++连接器使用所有系统内存

时间:2013-09-29 10:46:57

标签: c++ mysql connector

此代码看起来像使用所有系统内存。它为什么会发生?

sql::Statement *Query;
sql::ResulSet *Result;
while(1){
   Query = con->createStatement();
   Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
   Result->next();
   Result->close(); 
   Query->close();
   cout << "console message..." << endl;
   //delete Query; SEGFAULT
}

如果我评论除cout之外的所有行,则内存不会被填充。但是使用SQL看起来像Query = con&gt; createStatement;不替换旧的Query值和Result = bla;没有替换旧值

2 个答案:

答案 0 :(得分:2)

createStatement()executeQuery正在创建新对象(您在QueryResult中存储的对象。除非您明确删除它们,否则它们将保留在内存中。

添加

  delete Result;
  delete Query;

到你的循环。

BTW,这是在连接器文档中(连同示例代码)。

答案 1 :(得分:0)

看起来谷歌没有信息。我发现了什么问题。

正如SJuan76所说,每次调用createStatement和executeQuery都是一个新对象

所以我开始做很多尝试,我想出了以下

  1. 仅使用createStatement
  2. 删除结果之前检查是否打开和关闭
  3. 删除Respuesta
  4. 只删除程序auto_ptr结尾处的con和Query(有时是你的朋友)
  5. 所以让“永远运行”程序使用的代码总是使用相同的内存看起来像这样

    sql::Statement *Query;
    sql::ResulSet *Result;
    Query = con->createStatement();
    while(1){
     if(!Result->isClosed()) Result->close();
     delete Result;
     Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
     Result->next();
     cout << "console message..." << endl;
    }