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