QSqlQuery sqlQuery;
时间: 2024-08-28 20:03:07 浏览: 85
`QSqlQuery`是Qt数据库模块(QSqlDatabase)中的一个类,它用于执行SQL查询操作。在Qt中,如果你正在处理SQLite、MySQL、Oracle等数据库,你会创建一个`QSqlQuery`对象来执行CRUD(Create, Read, Update, Delete)操作,如查询数据、插入新记录、更新现有记录或删除数据。它的构造函数通常需要一个`QSqlDatabase`实例,以便连接到特定的数据库。
例如:
```cpp
QSqlDatabase db("QSQLITE", ":memory:");
if (!db.open()) {
// 处理错误...
}
QSqlQuery query(db);
query.prepare("SELECT * FROM table_name");
if (query.exec()) {
while(query.next()) {
// 处理查询结果...
}
} else {
// 处理执行错误...
}
```
在这里,`prepare()`方法设置SQL查询语句,`exec()`用于执行查询,`next()`遍历查询结果。
相关问题
// 查询全部数据,这里需要改造一下,我们传入一个空容器,然后,把数据弄出去 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`:关闭数据库连接。
// 插入单条数据 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; } }
这段代码是一个名为 `singleInsertData()` 的公有函数,用于向 SQLite 数据库中的 `idinfo` 数据表中插入一条数据。具体解释如下:
- 第 2 行:创建一个名为 `sqlQuery` 的 `QSqlQuery` 对象,用于执行 SQL 语句;
- 第 3 行:使用 `prepare()` 函数对 SQL 语句进行预处理,其中 `:usrname` 和 `:usrpass` 是占位符,用于接收 `info` 类型的数据对象中的 `usrname` 和 `usrpass` 属性值;
- 第 4 ~ 5 行:使用 `bindValue()` 函数将 `info` 类型的数据对象中的 `usrname` 和 `usrpass` 属性值绑定到占位符 `:usrname` 和 `:usrpass` 上;
- 第 7 ~ 12 行:执行 SQL 语句并进行错误处理,如果插入成功则输出提示信息并返回 `true`,否则输出错误信息并返回 `false`。
阅读全文