【问题标题】:Get data from sqlite database using qt使用 qt 从 sqlite 数据库中获取数据
【发布时间】:2019-01-07 08:32:04
【问题描述】:

我想从 sqlite 数据库中获取数据,我使用此代码它仅适用于小行,但是当尝试像 300000 这样的大数据时它不起作用 代码:

  QString serVal = "searchItem";
        QSqlQuery qry;

            qry.exec("select * from myTable");

            while (qry.next()) { 
                 if(serVal == qry.value("myCol1").toString())
                 {
                     qDebug () << qry.value("myCol2").toString();
                     qDebug () << qry.value("myCol5").toString();
                     qDebug () << qry.value("myCol8").toString();
                     break;

                 }
            }

【问题讨论】:

  • “它不起作用”不是有用的错误描述。如果您期望如此大的查询结果,您也应该使用 select ... from ... limit NNNN
  • 问题是程序停止加载并退出,但是如果用于小数据它可以正常加载,请您解释一下select ... from ...限制NNNN如何使用它。
  • qry.exec("select * from myTable where serVal = 'searchItem' ");可能是一个更好的查询。它会减少匹配的记录。
  • 还可以在执行查询之前尝试添加qry.setForwardOnly(true);。可能是make a difference.
  • @TrebuchetMS 感谢它的工作

标签: c++ qt sqlite


【解决方案1】:

像这样使用 QSqlQueryModel 而不是 QSqlQuery:

QSqlQueryModel queryModel;
queryModel->setQuery("select * from myTable");

while (queryModel.canFetchMore())
            queryModel.fetchMore();

for (int i = 0; i < queryModel.rowCount(); i++)
{
 // Your data
}

【讨论】:

  • 什么等价于这个:if(serVal == qry.value("myCol1").toString())
  • @ZoroAllam queryModel.record(i).field(1).value().toString(),
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2018-05-28
  • 2012-01-06
相关资源
最近更新 更多