【问题标题】:Can ADO on C++ platform be used to query a range of records? E.g. 100 records per query?C++平台上的ADO可以用来查询一系列记录吗?例如。每个查询 100 条记录?
【发布时间】:2011-10-10 14:53:38
【问题描述】:

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

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

我关心的是,如果表中的记录太多,如果我查询所有记录,会消耗很多内存吗?

我只想检索,每次可能 100 条记录并处理它们。可能吗?该表不包含 id 或 index 作为其属性,因此“Select * from table where id >= 1 and id

【问题讨论】:

    标签: c++ mysql sql ado


    【解决方案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 开始记录的数据库,您将不得不稍微修改该算法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2017-01-02
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多