最近遇到了一个问题,我想用occi获取oracle数据库表中的内字段名和类型 
,但是每次运行到
vector<MetaData>listOfColumns(emptab_metaData.getVector(MetaData::ATTR_LIST_COLUMNS));
for (vector<MetaData>::iterator i = listOfColumns.begin();i!=listOfColumns.end();i++)
{
MetaData columnObj = *i;
cout<<"Column Name:"<<(columnObj.getString(MetaData::ATTR_NAME))<<endl;
cout<<"Data Type:"<<(columnObj.getInt(MetaData::ATTR_DATA_TYPE))<<endl;
}
这段代码是就会出现段错误。内存问题
我查看了 listOfColumns.size()  竟然是个随机值。
不知道哪位大牛遇到同样的问题指点一下。下面是完整代码,并且保证m_con  不为空
用户名 systemMetaData emptab_metaData = m_con->getMetaData( m_table, MetaData::PTYPE_TABLE);
/* Now that you have the metadata information on the EMPLOYEES table,
   call the getxxx methods using the appropriate attributes */ /* Call getString */
cout<<"Schema:"<<(emptab_metaData.getString(MetaData::ATTR_OBJ_SCHEMA))<<endl;
/* Call getInt to get the number of columns in the table */
int columnCount=emptab_metaData.getInt(MetaData::ATTR_NUM_COLS);
cout<<"Number of Columns:"<<columnCount<<endl; /* Call getVector for attributes of list type,for example ATTR_LIST_COLUMNS */
try
{
vector<MetaData>listOfColumns(emptab_metaData.getVector(MetaData::ATTR_LIST_COLUMNS));
for (vector<MetaData>::iterator i = listOfColumns.begin();i!=listOfColumns.end();i++)
{
MetaData columnObj = *i;
cout<<"Column Name:"<<(columnObj.getString(MetaData::ATTR_NAME))<<endl;
cout<<"Data Type:"<<(columnObj.getInt(MetaData::ATTR_DATA_TYPE))<<endl;
}
}
catch(exception &e)
{   
cout<<e.what()<<endl;
}
catch(...)
{
cout<<"FATAL ERROR"<<endl;
}数据库OracleC