QT实例-数据库分页查询

1、分页思想借鉴网友:五十一、Qt之通用数据库分页_panchang199266的博客-CSDN博客_qt数据库分页查询

2、使用sqllite数据库进行测试:创建一个测试用表student并插入100万条数据,使用事务进行插入,插入时间大概是1.6s:

        {
            QSqlDatabase db;
            db = QSqlDatabase::addDatabase("QSQLITE", "main");
            db.setDatabaseName("zzc.db");
            if(!db.open())
            {
                qDebug() << "open error" << db.lastError();
            }

            QSqlQuery query(db);
            QString strSql = QString("create table student (id integer primary key autoincrement,"
                                     "grade int,"
                                     "age int);");

            if(!query.exec(strSql))
            {
                qDebug() << "create table" << db.lastError();
            }

            QVariantList var_grade_list, var_age_list;
            query.prepare(QObject::tr("insert into student(grade, age) values(?,?)"));
            for (int i = 0; i < 1000000;i++) {
                var_age_list << QRandomGenerator::global()->bounded(10, 20);
                var_grade_list << QRandomGenerator::global()->bounded(60, 120);
            }

            query.addBindValue(var_grade_list);
            query.addBindValue(var_age_list);

            //使用事务,实现快速批量插入
            QDateTime dtStart = QDateTime::currentDateTime();
            db.transaction();
            if(!query.execBatch()){
                qDebug() << query.lastError();
                db.rollback();
                }
            db.commit();
            QDateTime dtEnd = QDateTime::currentDateTime();
            double msec = dtStart.msecsTo(dtEnd);
            this->ui->Time->setText(QString("插入用时 %1 秒").arg(QString::number(msec / 1000, 'f', 3)));
        }
        QSqlDatabase::removeDatabase("main");

3、 主要思路:(1)、先查询表中总的数据行数,再根据每页显示的数据行数,计算出所需要的分页的数目;(2)、通过分页查询语句(关键字:limit)来查询并显示数据;(3)、使用模型视图模式来显示查询出来的数据。

4、需要注意多线程查询时,QSqlDatabase db变量不能跨线程使用,这根QT的版本有关,我是用的是QT5.13是不能跨线程使用的,所以我在每个线程中创建一个连接,使用完后调用:QSqlDatabase::removeDatabase("main");关闭连接,如下面,【注意db的作用域】:

{
    QDateTime dtStart = QDateTime::currentDateTime();
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE", "main");
    db.setDatabaseName("zzc.db");
    if(!db.open())
      {
         qDebug() << "open error" << db.lastError();
      }

      //......SQL操作......
}
QSqlDatabase::removeDatabase("main");

 代码下载:PageSelect.zip_qt分页查询-互联网文档类资源-CSDN下载

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值