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_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,然后每个种类用括号区分开来。

四、结语

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

Guess you like

Origin blog.csdn.net/qq_37603131/article/details/118368123