qt之查询数据库方式

一、前言

查询数据库方式

二、环境

qt all 

mingw

sqlite3

window10

三、正文

1.数据库表内只有单行的数据查询

    QSqlQuery qry(db);
    QString sql=tr("select * from parameter");
    if(qry.exec(sql)&&qry.next()){
        Datapoint=qry.value(1).toInt();
        Datafreq=qry.value(2).toInt();
        Datamode=qry.value(3).toInt();
    }

2.数据库表内有多行的数据查询(不固定行数据)

    QSqlQuery qry(db);
    if(qry.exec("select * from lastlog")){
          for(int i=0;qry.next()&&i<10000;i++){
              bussiness_flag[i]=qry.value(0).toInt();
              bussiness_timer[i]=qry.value(1).toInt();
              bussiness_name[i]=qry.value(2).toString();
          }
    }

3.数据库表内有多行的数据查询(搜索查询)

    QSqlQuery qry(db);
    QString sql;
    sql=QString("select * from history where times is '%1'").arg(timers);
    if(qry.exec(sql)){
          for(i=0;qry.next()&&i<10000;i++){
              thistimes[i].note=qry.value(0).toString();
              thistimes[i].income=qry.value(2).toDouble();
              thistimes[i].payout=qry.value(3).toDouble();
          } 
    }

 4.数据库表内有多行的数据查询(时间范围查询)

    QSqlQuery qry(db);
    QString sql=tr("select * from history where time between '%1' and '%2'").arg(startdata).arg(enddata);
    if(qry.exec(sql)){
          for(int i=0;qry.next()&&i<1000;i++){
             thistimes[i].payout=qry.value(3).toDouble();
          }
    }

 5.数据库表内有多行的数据查询(多条件查询)

    QSqlQuery qry(db);
    QString sql=tr("select * from Sys_model where car='%1' and part='%2'").arg(car).arg(part);
    if(qry.exec(sql)){
          for(int i=0;qry.next()&&i<10000;i++){
             Data_model.id.append(qry.value(0).toUInt());
          }
    }

6.数据库表内有多行的数据查询(多条件筛选查询)(多个模糊数据‘与’关系筛选搜索)

    QSqlQuery qry(db);
    QString sql=tr("select * from Sys_model where car like '%%1%' and part like '%%2%' and 性别='男'").arg(car).arg(part);
    if(qry.exec(sql)){
          for(int i=0;qry.next()&&i<10000;i++){
             Data_model.id.append(qry.value(0).toUInt());
          }
    }

 7.数据库表内有多行的数据查询(多条件筛选查询)(多个模糊数据‘或’关系筛选搜索)

    QSqlQuery qry(db);
    QString sql=tr("select * from Sys_model where car like '%%1%' or part like '%%2%'").arg(car).arg(part);
    if(qry.exec(sql)){
          for(int i=0;qry.next()&&i<10000;i++){
             Data_model.id.append(qry.value(0).toUInt());
          }
    }

8.数据库表内有多行的数据查询(多条件多种类筛选查询)(日期范围+指定列内容搜索查询)

    QSqlQuery qry(db);
    QString sql=tr("select * from Sys_history where (time between '%1' and '%2') and (user = '%3') and (car = '%4')").arg(m_search_startdate.toString("yyyy.MM.dd")).arg(m_search_enddate.toString("yyyy.MM.dd")).arg(m_search_user).arg(m_search_car);
    if(qry.exec(sql)){
          for(int i=0;qry.next()&&i<10000;i++){
             Data_model.id.append(qry.value(0).toUInt());
          }
    }

这里就是将多个where分开,只有一个where,然后每个种类用括号区分开来。

 9.数据库表内有多行的数据查询(多条件筛选查询)(指定数据和筛选模糊数据组合)

    //筛选搜索数据库数据
    QStringList searchterm;//筛选条件,默认包含日期筛选,人员筛选,编码筛选,如有不同功能更改相应部分
    if(ui->checkBox_car->isChecked())//判断车型是否包含
        searchterm.append(QString("car is '%1'").arg(ui->comboBox_car->currentText()));
    if(ui->checkBox_fensys->isChecked())
        searchterm.append(QString("sysfen is '%1'").arg(ui->comboBox_fensys->currentText()));
    if(ui->checkBox_zisys->isChecked())
        searchterm.append(QString("syszi is '%1'").arg(ui->comboBox_zisys->currentText()));
    if(ui->checkBox_part->isChecked())
        searchterm.append(QString("part is '%1'").arg(ui->comboBox_part->currentText()));
    if(ui->checkBox_guanjian->isChecked())
        searchterm.append(QString("(car like '%%1%' or sysfen like '%%2%' or syszi like '%%3%' or part like '%%4%' or note like '%%5%')")
                          .arg(ui->lineEdit_guanjian->text())
                          .arg(ui->lineEdit_guanjian->text())
                          .arg(ui->lineEdit_guanjian->text())
                          .arg(ui->lineEdit_guanjian->text())
                          .arg(ui->lineEdit_guanjian->text()));
    QSqlQuery qry(db);
    QString sql=QString("select * from Sys_repair");
    if(searchterm.size()>0){//判断是否有筛选条件
        sql.append(" where ");
        for(int i=0;i<searchterm.size();i++){
            sql.append(searchterm.at(i));//添加筛选内容
            if(i<(searchterm.size()-1))
                sql.append(" and ");//添加连接符,最后一个不添加
        }
    }
//    ui->btn_datasearch->setToolTip(sql);
    qDebug()<<sql;
    QStringList searchdata[5];//搜索数据,本程序数据库包含5列,如更换不同程序数据列不同更改相应部分
    if(qry.exec(sql)){
      for(int i=0;qry.next()&&i<10000;i++){
          searchdata[0].append(qry.value(0).toString());//赋值车型
          searchdata[1].append(qry.value(1).toString());//赋值分系统
          searchdata[2].append(qry.value(2).toString());//赋值子系统
          searchdata[3].append(qry.value(3).toString());//赋值部件
          searchdata[4].append(qry.value(4).toString());//赋值说明
      }
    }

各种条件采用and语句连接,模糊筛选多个表头部分采用括号括起来,在and连接就不会混淆

打印信息如下

"select * from Sys_repair where syszi is 'xx系统' and part is '发动机' and (car like '%万用表%' or sysfen like '%万用表%' or syszi like '%万用表%' or part like '%万用表%' or note like '%万用表%')"

这样搜索就会搜索数据库syszi 表头的'xx系统part 表头的发动机和各个表头的模糊筛选包含万用表的数据

四、结语

        读取大量数据死机时,在qry.exec前使用qry.setForwardOnly(true);试试,会有奇效
 

  • 10
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大桶矿泉水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值