一、前言
查询数据库方式
二、环境
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);试试,会有奇效