以下是我的代码,想查看某张表的字段属性,该段代码是放在一个线程里的,也能获取到相关字段的属性,但是奇怪的是出了该 try 代码后就出现异常:
Debug Assertion Failed!File:dbgdel.cpp
Line: 47Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)查看命令堆栈后,感觉是 vector<MetaData> listOfColumns 释放出了问题,但是参看了 oracle 自带的范例也是类似调用的,所以一直无法解决,恳请高手一起研究,指点一二。try {
m_stmt = m_conn->createStatement ("select * from TableA");
ResultSet *rs = m_stmt->executeQuery();vector<MetaData> listOfColumns = rs->getColumnListMetaData();unsigned int uiColumnNum = listOfColumns.size();
TRACE("字段数=%u\n", uiColumnNum);for (i=0; i<uiColumnNum; i++)
{
MetaData columnObj = listOfColumns[i]; TRACE("%d 列名:%s\n", i+1, columnObj.getString (MetaData::ATTR_NAME).c_str());
TRACE("%d 类型:%d, %s\n", i+1, columnObj.getInt(MetaData::ATTR_DATA_TYPE), getTypeString(columnObj.getInt(MetaData::ATTR_DATA_TYPE)).c_str());
TRACE("%d 大小:%d\n", i+1, columnObj.getInt(MetaData::ATTR_DATA_SIZE));
TRACE("%d 精度:%d\n", i+1, columnObj.getInt(MetaData::ATTR_PRECISION));
TRACE("%d 数值范围:%d\n", i+1, columnObj.getInt(MetaData::ATTR_SCALE));
if( columnObj.getBoolean(MetaData::ATTR_IS_NULL) )
TRACE("%d 允许为空\n", i+1);
else
TRACE("%d 不允许为空\n", i+1);
}
m_stmt->closeResultSet (rs);
}
catch(SQLException ex)
{
.....
}
Debug Assertion Failed!File:dbgdel.cpp
Line: 47Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)查看命令堆栈后,感觉是 vector<MetaData> listOfColumns 释放出了问题,但是参看了 oracle 自带的范例也是类似调用的,所以一直无法解决,恳请高手一起研究,指点一二。try {
m_stmt = m_conn->createStatement ("select * from TableA");
ResultSet *rs = m_stmt->executeQuery();vector<MetaData> listOfColumns = rs->getColumnListMetaData();unsigned int uiColumnNum = listOfColumns.size();
TRACE("字段数=%u\n", uiColumnNum);for (i=0; i<uiColumnNum; i++)
{
MetaData columnObj = listOfColumns[i]; TRACE("%d 列名:%s\n", i+1, columnObj.getString (MetaData::ATTR_NAME).c_str());
TRACE("%d 类型:%d, %s\n", i+1, columnObj.getInt(MetaData::ATTR_DATA_TYPE), getTypeString(columnObj.getInt(MetaData::ATTR_DATA_TYPE)).c_str());
TRACE("%d 大小:%d\n", i+1, columnObj.getInt(MetaData::ATTR_DATA_SIZE));
TRACE("%d 精度:%d\n", i+1, columnObj.getInt(MetaData::ATTR_PRECISION));
TRACE("%d 数值范围:%d\n", i+1, columnObj.getInt(MetaData::ATTR_SCALE));
if( columnObj.getBoolean(MetaData::ATTR_IS_NULL) )
TRACE("%d 允许为空\n", i+1);
else
TRACE("%d 不允许为空\n", i+1);
}
m_stmt->closeResultSet (rs);
}
catch(SQLException ex)
{
.....
}
link的occi库的版本是多少?
occilib好像不分什么单线程的lib或者多线程的lib了吧?
你看一下你用的occi.lib的readme文档,其中有没有提到是否支持你所用的编译器?支持多线程吗?以上思路,仅供参考。