我正在使用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){}
答案 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查询。