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

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


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

我只想每次检索100条记录并进行处理。可能吗?该表不包含ID或索引作为其属性,因此“从ID> = 1且ID

最佳答案

您将要在查询上使用限制并在它们之间循环。

//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开始记录的数据库,则必须稍微修改该算法。

09-07 06:51