QString select_all_sql = "select * from student"; sql_query.prepare(select_all_sql); if(!sql_query.exec()) { qDebug()<<sql_query.lastError(); } else { while(sql_query.next()) { int id = sql_query.value(0).toInt(); QString name = sql_query.value(1).toString(); int age = sql_query.value(2).toInt(); qDebug()<<QString("id:%1 name:%2 age:%3").arg(id).arg(name).arg(age); } } 查找不到数据value返回值为
时间: 2024-02-02 17:05:03 浏览: 272
如果查询不到数据,`sql_query.value()` 的返回值将是一个空的 `QVariant`。在此示例中,由于查询的第一列是 `int` 类型,因此 `sql_query.value(0).toInt()` 将返回 `0`。同样,由于查询的第二列是 `QString` 类型,因此 `sql_query.value(1).toString()` 将返回一个空字符串,而查询的第三列是 `int` 类型,因此 `sql_query.value(2).toInt()` 将返回 `0`。因此,在此示例中,如果查询不到数据,则输出的结果将是 `id:0 name: age:0`。
相关问题
void Widget::on_pushButton_add_employee_clicked() { QString number=ui->lineEdit_employee_number->text(); QString name=ui->lineEdit_employee_name->text(); QString phone=ui->lineEdit_employee_phone->text(); if(number.isEmpty()||name.isEmpty()||phone.isEmpty()) { QMessageBox::information(this,"提示","请认真填写数据后再添加.", QMessageBox::Ok,QMessageBox::Ok); return; } //没有表就先创建 CreateStudentSurface(); //添加数据到表 //保存数据到数据库 QSqlQuery sql_query(database); //查询原数据库表里有没有重复数据 //查询全部数据 sql_query.prepare("select * from student"); if(!sql_query.exec()) { Log_Text_Display("员工数据库查询错误.\n"); } else { while(sql_query.next()) { //ID、工号、姓名、电话、状态 // int id = sql_query.value(0).toInt(); //ID QString find_number = sql_query.value(1).toString(); //工号 QString find_name = sql_query.value(2).toString(); //姓名 QString find_phone = sql_query.value(3).toString(); //电话 QString find_state = sql_query.value(4).toString(); //状态 //判断工号有没有冲突的 if(number==find_number) { QMessageBox::information(this,"提示","你输入的工号在数据库已经存在!\n请认真填写.", QMessageBox::Ok,QMessageBox::Ok); return; } } } //准备插入数据 //查询最大ID QString select_max_sql = "select max(id) from student"; int max_id = 0; sql_query.prepare(select_max_sql); if(!sql_query.exec()) { QMessageBox::information(this,"提示","员工表最大ID查找失败.", QMessageBox::Ok,QMessageBox::Ok); return; } else { while(sql_query.next()) { max_id = sql_query.value(0).toInt(); } Log_Text_Display(QString("data base max id:%1\n").arg(max_id)); } if(max_id>=300) { QMessageBox::information(this,"提示","指纹库已满,无法录入.", QMessageBox::Ok,QMessageBox::Ok); return; } //录入指纹 Lu_ru_zhi_weN_flag=1; ui->plainTextEdit_lu_ru->clear(); //串口发送指令,表示录入指纹 QString cmd=tr("$dev_cmd_lu_ru_zhi_wen:%1").arg(max_id); UART_Send(cmd.toUtf8()); }
这段代码是关于一个名为Widget的类中的一个槽函数on_pushButton_add_employee_clicked()的实现。该函数实现了添加员工信息的功能。
首先,函数通过调用ui对象的lineEdit_employee_number、lineEdit_employee_name和lineEdit_employee_phone方法获取输入的员工编号、姓名和电话号码。然后,它检查这些输入是否为空,如果有任何一个为空,则弹出一个提示框提醒用户认真填写数据,并返回。
接下来,函数调用CreateStudentSurface()方法创建一个表(如果表不存在),然后通过使用QSqlQuery对象执行SQL查询来检查数据库中是否存在相同的员工编号。如果存在相同的员工编号,则弹出一个提示框提醒用户输入的工号在数据库中已经存在,并返回。
如果没有重复的员工编号,函数将执行查询最大ID的SQL语句来获取当前数据库中最大的ID值,并将其存储在max_id变量中。接着,它检查max_id的值是否大于等于300,如果是,则弹出一个提示框告知指纹库已满无法录入,并返回。
最后,函数将设置Lu_ru_zhi_weN_flag变量为1,并清空plainTextEdit_lu_ru控件。然后,它构建一个发送给串口的指令cmd,表示录入指纹,并通过UART_Send方法发送该指令。
请注意,该代码片段中的一些函数(如CreateStudentSurface、Log_Text_Display和UART_Send)可能是自定义的函数,因此需要根据上下文进行实现或查找其实现。
// 查询全部数据,这里需要改造一下,我们传入一个空容器,然后,把数据弄出去 void SqOperator::queryTable(QList<QString> &list) { QSqlQuery sqlQuery; sqlQuery.exec("SELECT * FROM idinfo"); if(!sqlQuery.exec()) { qDebug() << "Error: Fail to query table. " << sqlQuery.lastError(); } else { while(sqlQuery.next()) { QString usrname = sqlQuery.value(0).toString(); list.append(usrname); QString usrpass = sqlQuery.value(1).toString(); list.append(usrpass); //qDebug()<<QString("id:%1 name:%2").arg(id).arg(name); } } } // 插入单条数据 bool SqOperator::singleInsertData(info &singledb) { QSqlQuery sqlQuery; sqlQuery.prepare("INSERT INTO idinfo VALUES(:usrname,:usrpass)"); sqlQuery.bindValue(":usrname", singledb.usrname); sqlQuery.bindValue(":usrpass", singledb.usrpass); if(!sqlQuery.exec()) { qDebug() << "Error: Fail to insert data. " << sqlQuery.lastError(); return false; } else { qDebug() <<"insert success."; // do something return true; } } // 插入多条数据 void SqOperator::moreInsertData(QList<info>& moredb) { // 进行多个数据的插入时,可以利用绑定进行批处理 QSqlQuery sqlQuery; sqlQuery.prepare("INSERT INTO idinfo VALUES(?,?,?)"); QVariantList nameList,passList; for(int i=0; i< moredb.size(); i++) { nameList << moredb.at(i).usrname; passList << moredb.at(i).usrpass; } sqlQuery.addBindValue(nameList); sqlQuery.addBindValue(passList); if (!sqlQuery.execBatch()) // 进行批处理,如果出错就输出错误 { qDebug() << sqlQuery.lastError(); } } // 修改数据 void SqOperator::modifyData(QString usrname,QString usrpass) { QSqlQuery sqlQuery; sqlQuery.prepare("UPDATE student SET usrname=?,usrpass=?"); sqlQuery.addBindValue(usrname); sqlQuery.addBindValue(usrpass); if(!sqlQuery.exec()) { qDebug() << sqlQuery.lastError(); } else { qDebug() << "updated data success!"; } } // 删除数据 void SqOperator::deleteData(QString usrname) { QSqlQuery sqlQuery; sqlQuery.exec(QString("DELETE FROM student WHERE id = %1").arg(usrname)); if(!sqlQuery.exec()) { qDebug()<<sqlQuery.lastError(); } else { qDebug()<<"deleted data success!"; } } //删除数据表 void SqOperator::deleteTable(QString& tableName) { QSqlQuery sqlQuery; sqlQuery.exec(QString("DROP TABLE %1").arg(tableName)); if(sqlQuery.exec()) { qDebug() << sqlQuery.lastError(); } else { qDebug() << "deleted table success"; } } void SqOperator::closeDb(void) { database.close(); }用C++语法解释每一行代码,并说明作用
```C++
void SqOperator::queryTable(QList<QString> &list) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.exec("SELECT * FROM idinfo"); // 执行查询语句
if(!sqlQuery.exec()) { // 判断查询是否失败
qDebug() << "Error: Fail to query table. " << sqlQuery.lastError(); // 输出错误信息
} else {
while(sqlQuery.next()) { // 循环遍历结果集
QString usrname = sqlQuery.value(0).toString(); // 获取第一列的值
list.append(usrname); // 将获取的值添加到 QList 中
QString usrpass = sqlQuery.value(1).toString(); // 获取第二列的值
list.append(usrpass); // 将获取的值添加到 QList 中
}
}
}
bool SqOperator::singleInsertData(info &singledb) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.prepare("INSERT INTO idinfo VALUES(:usrname,:usrpass)"); // 准备插入语句
sqlQuery.bindValue(":usrname", singledb.usrname); // 绑定参数
sqlQuery.bindValue(":usrpass", singledb.usrpass); // 绑定参数
if(!sqlQuery.exec()) { // 判断插入是否失败
qDebug() << "Error: Fail to insert data. " << sqlQuery.lastError(); // 输出错误信息
return false; // 返回失败
} else {
qDebug() <<"insert success."; // 输出成功信息
return true; // 返回成功
}
}
void SqOperator::moreInsertData(QList<info>& moredb) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.prepare("INSERT INTO idinfo VALUES(?,?,?)"); // 准备插入语句
QVariantList nameList,passList; // 创建 QVariantList 类型的对象
for(int i=0; i< moredb.size(); i++) { // 循环遍历 QList
nameList << moredb.at(i).usrname; // 将每个 info 对象的 usrname 添加到 QVariantList 中
passList << moredb.at(i).usrpass; // 将每个 info 对象的 usrpass 添加到 QVariantList 中
}
sqlQuery.addBindValue(nameList); // 绑定 QVariantList 类型的对象
sqlQuery.addBindValue(passList); // 绑定 QVariantList 类型的对象
if (!sqlQuery.execBatch()) // 执行批处理
{
qDebug() << sqlQuery.lastError(); // 输出错误信息
}
}
void SqOperator::modifyData(QString usrname,QString usrpass) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.prepare("UPDATE student SET usrname=?,usrpass=?"); // 准备更新语句
sqlQuery.addBindValue(usrname); // 绑定参数
sqlQuery.addBindValue(usrpass); // 绑定参数
if(!sqlQuery.exec()) { // 判断更新是否失败
qDebug() << sqlQuery.lastError(); // 输出错误信息
} else {
qDebug() << "updated data success!"; // 输出成功信息
}
}
void SqOperator::deleteData(QString usrname) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.exec(QString("DELETE FROM student WHERE id = %1").arg(usrname)); // 执行删除语句
if(!sqlQuery.exec()) { // 判断删除是否失败
qDebug()<<sqlQuery.lastError(); // 输出错误信息
} else {
qDebug()<<"deleted data success!"; // 输出成功信息
}
}
void SqOperator::deleteTable(QString& tableName) {
QSqlQuery sqlQuery; // 创建 QSqlQuery 类对象
sqlQuery.exec(QString("DROP TABLE %1").arg(tableName)); // 执行删除表语句
if(sqlQuery.exec()) { // 判断删除是否失败
qDebug() << sqlQuery.lastError(); // 输出错误信息
} else {
qDebug() << "deleted table success"; // 输出成功信息
}
}
void SqOperator::closeDb(void) {
database.close(); // 关闭数据库连接
}
```
这段代码是一个使用 Qt 操作 SQLite 数据库的类 SqOperator 的实现,主要包含了增删改查以及关闭数据库的操作。其中,每个函数的作用如下:
- `queryTable`:查询表中全部数据,并将结果存储到 QList 中。
- `singleInsertData`:插入单条数据。
- `moreInsertData`:插入多条数据。
- `modifyData`:更新数据。
- `deleteData`:删除数据。
- `deleteTable`:删除数据表。
- `closeDb`:关闭数据库连接。
阅读全文