QT的QSqlQuery与QSqlQueryModel读取数据库问题
2012-09-14 17:28
561 查看
在使用QT的QSqlQueryModel操作SQLite数据库的时候,遇到了查询只能返回256个结果的问题,经过差不多大半天的时候才找到解决方法。既然说到数据库操作了,就把一些基础性的东西也都贴出来,一方面供初学者参考,另一方面自己也做个备忘。
QT中使用QSqlQuery或者QSqlQueryModelc操作数据库的方法很简单,这里不再赘述,仅贴一个小例子来说明一下。
第一步:连接数据库
第二步:使用QSqlQueryModel或者QSqlQuery操作数据库
通过上面两步,就可以实现最简单的SQLite数据库操作了,可以正确的返回数据表中的数据一点儿问题都没有。然后,错误就隐藏在疏忽大意之间,QT的QSqlQuery或QSqlQueryModel每次最多只能缓存查询结果的256条。即,如果查询语句操作的结果超过256条了,也只能返回256。这样就必然会导致在后续操作中的错误。
解决这个问题的方法也很简答,但是却让我耗费了整整一个下午的时间:在操作结果前先通过fetchmore()来获取所有的结果,方法如下:
阿科
2012年9月14日于北京邮电大学新科研楼302
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); }
第二步:使用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; }
阿科
2012年9月14日于北京邮电大学新科研楼302
相关文章推荐
- QT的QSqlQuery与QSqlQueryModel读取数据库问题
- QT的QSqlQuery与QSqlQueryModel读取数据库问题
- QT的QSqlQuery与QSqlQueryModel RowCount只能读到256问题的解决
- Qt qsqlquerymodel 中文显示乱码问题解决
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- 一起看代码来玩玩QT之18 database (last QSqlQueryModel 对数据库进行操作(只查不能改)QTableModel 可改,但是QSqlQueryModel也可以添加代理等功)
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- QT 查询数据库 sql QSqlQueryModel
- 十六、Qt数据库 之 QSqlQueryModel & QSqlTableModel
- Qt之操作数据库(SQLite) [此博文包含图片] (2013-12-09 16:58:05) 转载 ▼ 标签: qt sqlite qsqldatabase qsqlquery qsqlerro
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- QT QSqlQuery QSqlQueryModel
- Qt数据库 QSqlTableModel实例操作(1)
- QT QSqlQuery QSqlQueryModel
- Qt 数据库模型(QSqlQueryModel,QSqlTableModel)获取模型中的所有数据
- QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
- 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理
- QT QSqlTabModel 学习,用于从数据库中存取修改等操作。
- QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据