循环结果集

时间:2016-10-25 13:20:21

标签: c++ mysql iteration

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

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){}

1 个答案:

答案 0 :(得分:0)

访问RDBMS时,您获得的ResultSet通常是面向行的。也就是说,无论何时调用ResultSet :: next(),光标都会移动到下一行。这就是你的循环

的原因
for (int i = 0; i < columncount; i++)
{                 
    while (res->next())
    {
        ...
    }
}

仅显示第一个属性。

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

while (res->next())
{
    for (int i = 0; i < columncount; i++)
    {
        ...
    }
}

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