首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历结果集

问循环遍历结果集
EN

Stack Overflow用户
提问于 2016-10-25 13:20:20
回答 1查看 1.2K关注 0票数 0

我正在使用MySQL C++连接器,并试图以以下方式遍历结果集:应用程序应该遍历每一列,而不是取决于数据类型。代码应该捕获数据类型,然后继续。问题是,我正在测试的表有16列,但我的代码只运行第一列?

代码语言:javascript
复制
try
{               
  driver = get_driver_instance();
  con = driver->connect(connectionString, str_username, str_password);
  con->setSchema(str_schema);
  stmt = con->createStatement();
  res = stmt->executeQuery(selectquery);
  res_meta = res->getMetaData();

  string datatype;  
  int columncount = res_meta->getColumnCount();

  for (int i = 0; i < columncount; i++)
  {                 
     while (res->next())
     datatype = res_meta->getColumnTypeName(i + 1);
     {
       if(datatype == "INT")
       {
         switch (res_meta->getColumnDisplaySize(i + 1))
         {
           case 64:
              break;
           case 32:
              break;
           default:
              break;
         }
      }
   }    
}
catch(sql::SQLException &e){}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-25 13:27:49

当访问关系数据库时,您得到的ResultSet通常是面向行的。也就是说,每当调用ResultSet:: next ()时,光标就会移动到下一行。这就是为什么你的循环

代码语言:javascript
复制
for (int i = 0; i < columncount; i++)
{                 
    while (res->next())
    {
        ...
    }
}

只显示第一个属性。

通常,您可以切换内部和外部循环,例如

代码语言:javascript
复制
while (res->next())
{
    for (int i = 0; i < columncount; i++)
    {
        ...
    }
}

但是,如果确实需要一次访问一个列,则必须检查ResultSet是否允许将光标重置为第一行。如果不是,您必须缓存数据,或者一次又一次地发出同一个SQL查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40241120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档