当值 >=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 中值的 length 为 more[=39= 时才会出现此问题] 或 等于 到 16。如果值的 length 为 less 或 equals[=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().
ResultSet *search;
....
....
search= prepareStatement->executeQuery();
while (search->next())
{
cout << "Email Found: " << search->getString("EmailColumn") << endl; //crashes here
}
从上面的代码来看,调用getString()函数实际上是获取数据库中的值。但随后它使程序崩溃。它 显示 值然后 崩溃 程序。
我发现问题但无法修复它。我无法判断这是 bug 还是 其他问题。
仅当 EmailColumn column 中值的 length 为 more[=39= 时才会出现此问题] 或 等于 到 16。如果值的 length 为 less 或 equals[=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().