QT的QSqlQuery与QSqlQueryModel读取数据库问题


          在使用QT的QSqlQueryModel操作SQLite数据库的时候,遇到了查询只能返回256个结果的问题,经过差不多大半天的时候才找到解决方法。既然说到数据库操作了,就把一些基础性的东西也都贴出来,一方面供初学者参考,另一方面自己也做个备忘。

          QT中使用QSqlQuery或者QSqlQueryModelc操作数据库的方法很简单,这里不再赘述,仅贴一个小例子来说明一下。

          第一步:连接数据库

    QSqlDatabase   m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(strDBPath);
    if(!m_db.open())
    {
        QMessageBox::critical(0,tr("数据库打开失败"),tr("无法建立数据库连接.\n"),QMessageBox::Cancel);
    }QSqlDatabase   m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(strDBPath);
    if(!m_db.open())
    {
        QMessageBox::critical(0,tr("数据库打开失败"),tr("无法建立数据库连接.\n"),QMessageBox::Cancel);
    }

 

        第二步:使用QSqlQueryModel或者QSqlQuery操作数据库

 

    QSqlQueryModel sqlModel;
    QString   strQuery = "select provinceID,province from province";
    sqlModel.setQuery(strQuery);
    for(int nProvinceNum = 0; nProvinceNum < sqlModel.rowCount(); nProvinceNum++)
    {
        cout<<sqlModel.record(nProvinceNum).value("provinceID").toDouble()<<endl;
        cout<<strProvinceSqliteName = sqlModel.record(nProvinceNum).value("province").toString()<<endl;
   }

 

       通过上面两步,就可以实现最简单的SQLite数据库操作了,可以正确的返回数据表中的数据一点儿问题都没有。然后,错误就隐藏在疏忽大意之间,QT的QSqlQuery或QSqlQueryModel每次最多只能缓存查询结果的256条。即,如果查询语句操作的结果超过256条了,也只能返回256。这样就必然会导致在后续操作中的错误。

 

       解决这个问题的方法也很简答,但是却让我耗费了整整一个下午的时间:在操作结果前先通过fetchmore()来获取所有的结果,方法如下:

 

      while(dataSqlModel.canFetchMore())
        {
            dataSqlModel.fetchMore();
        }

       for(int nProvinceNum = 0; nProvinceNum < sqlModel.rowCount(); nProvinceNum++)

       {

          cout<<sqlModel.record(nProvinceNum).value("provinceID").toDouble()<<endl;

          cout<<strProvinceSqliteName = sqlModel.record(nProvinceNum).value("province").toString()<<endl;
       }

 

 


我们团队有着十几年的期货程序化交易算法与软件研发经验,基于C++ Qt技术研发了具有自主知识产权的期货智能程序化交易一体化系统平台,该平台封装了二百多个量化指标,具有低时延、高性能、小滑点、可定制和跨平台的特点。团队致力于将人工智能技术与传统的程序化交易技术相结合为客户提供灵活可定制的期货智能程序化交易服务和产品。

 

 

       

2012年9月14日于北京邮电大学新科研楼302

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值