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 ,则否错误。
这方面有任何解决方案或解决方法吗?
答案 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()。