我正在使用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){}发布于 2016-10-25 13:27:49
当访问关系数据库时,您得到的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查询。
https://stackoverflow.com/questions/40241120
复制相似问题