【问题标题】:ResultSet ->getString() crashes when value is >=16ResultSet ->getString() 在值 >=16 时崩溃
【发布时间】:2015-08-09 05:09:10
【问题描述】:
ResultSet *search;
....
....
search= prepareStatement->executeQuery();


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

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

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

只有在 EmailColumn column 中值的 lengthmoreequals 时才会出现问题16。如果值的长度 小于等于15,则错误。

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

【问题讨论】:

  • 嗯......最简单的解决方法是使用最大字符串。您的数据库中的长度为 15。开个玩笑 ;) ...... ResultSet 类是自写类吗?如果是这样......它是否有一个 char-Array 用于存储从 DB 返回的字符串,这个 char-Array 是否限制为 16 个?
  • ResultSet 不是我写的。它来自 Oracle,被用来在查询数据库后读取从数据库返回的值。 getString 似乎是从数据库中获取字符串的唯一方法。
  • 代码看起来不错。但我没有看到 ResultSet::getString 重载将字符串作为 Oracle 文档中的参数(我不熟悉库,所以只需检查它)。还要检查你是否链接了正确的库,如stackoverflow.com/questions/10803306/…
  • 作为 nikitoz,我在 OCCI 库中找不到任何此类重载函数。如果您使用的是 OCCI,我建议您在标签中添加“occi”。否则......给我们一个提示,这个类来自哪里。
  • 有许多关于 SO 的问题与 ResultSet::getString() 的问题有关,原因各不相同。您是否尝试过任何这些问题中建议的修复?例如:(stackoverflow.com/questions/15832958/…)、(stackoverflow.com/questions/24014069/…)、(stackoverflow.com/questions/4822958/…)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我几乎遇到了同样的问题(后来意识到 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() (这导致我的应用程序崩溃)结果集::getString()。

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      相关资源
      最近更新 更多