可以使用C ++平台上的ADO查询一系列记录吗?例如。每个查询100条记录?

时间:2011-10-10 06:10:48

标签: c++ mysql sql ado

我正在使用带有ADO的c ++连接到mySql数据库,我使用标准的ADO / C ++方法创建与mySql数据库的连接,recordset是指向检索到的第一条记录的指针< / p>

_RecordsetPtr recordset;
recordset->Open("Select * from table",p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);  

我担心的是,如果表包含太多记录,并且如果我查询所有记录,它将消耗大量内存?

我想只检索,每次可能有100条记录并处理它们。可能吗?该表不包含id或index作为其属性,因此“select * from table from id&gt; = 1且id&lt; = 100”不起作用。

1 个答案:

答案 0 :(得分:1)

您需要对查询使用限制并循环使用它们。

//SELECT * FROM table LIMIT 0 OFFSET 100

int tlimit, blimit;
std::string query;
std::stringstream sstm;
_RecordsetPtr recordset, count;

count->Open("SELECT COUNT(*) FROM table",p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);

for(int i = 0; i < count/100 + 1; i++)
{
   tlimit = 100 * i + 100;
   blimit = 100 * i;

   sstm << "SELECT * FROM table LIMIT " << blimit << " OFFSET " << tlimit;
   query = sstm.str();

   recordset->Open(query,p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);

   //suggest passing the recordset to a function to do what ever you want with it here
}

请注意,如果您没有使用从1开始记录的数据库,则必须稍微修改该算法。