当值为> = 16时,ResultSet - > getString()崩溃

时间:2015-05-27 08:24:27

标签: c++ mysql crash database-connection mysql-connector

login      gw1         gw2         gw3         gw4         gw5
---------- ----------- ----------- ----------- ----------- -----------
Peter      1           0           1           0           0
Sandy      1           1           1           1           0
Don        1           2           0           1           2

从上面的代码中,调用 getString()函数实际上获取数据库中的值。但随后它崩溃了该计划。 显示值,然后崩溃该程序。

发现 问题,但无法 修复。我不知道这是错误还是其他

只有当EmailColumn 长度的值更多等于时,才会出现此问题的 16 即可。如果值的长度 更少等于 15 ,则错误。

这方面有任何解决方案或解决方法吗?

2 个答案:

答案 0 :(得分:1)

我解决了。解决方案是构建自己的C ++连接器并使用它编译的dll文件。 Oracle分发的dll是使用我目前使用的不同版本的Visual Studio编译器。这里的第一个答案将向您展示如何自己构建它。 MySQL Connector C++ 64bit build from source in Visual Studio 2012

答案 1 :(得分:0)

我遇到了几乎相同的问题(并且意识到Oracle不再支持Windows库已经为时已晚)。以下解决方法对我有用:

ResultSet *search;
....
....
search= prepareStatement->executeQuery();

while( search->next() )
{
  string const * theString = 
    new string( search->getString( "EmailColumn") );

  cout << *theString << endl;

  operator delete( theString );
  theString = nullptr;
}

我的猜测是,通过这种构造,VisualStudio 2015正在编译未调用析构函数std :: string ::〜string()(这导致我的应用程序崩溃)的代码,该字符串是由库通过以下方式创建的: ResultsSet :: getString()。