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

ResultSet ->getString() crashes when value is >=16

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


while (search->next())
{
cout << "Email Found: " << search->getString("EmailColumn") << endl; //crashes here
}

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

发现问题无法修复它。我无法判断这是 bug 还是 其他问题

仅当 EmailColumn column 中值的 lengthmore[=39= 时才会出现此问题] 或 等于 16。如果值的 lengthlessequals[=39,则 No 错误=] 到 15

对此有任何解决方案或解决方法吗?

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

我遇到了几乎相同的问题(并且意识到 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 编译的代码不会为由图书馆通过 ResultsSet::getString().