文章目录
- 一、概述
- 二、使用流程
- 三、常用函数的介绍
- 四、使用QSqlDatabase创建数据表和插入数据
- 五、使用QSqlDatabase使用查询数据表中的数据
- 六、使用QSqlDatabase更新数据表中的数据
- 七、使用QSqlDatabase删除数据表中的数据
一、概述
QSqlDatabase 是 Qt 中用于管理和访问数据库连接的类。它提供了一种统一的方式来连接不同的数据库引擎,执行 SQL 查询和操作数据库。它支持多种数据库管理系统(如 SQLite、MySQL、PostgreSQL 等),并提供了统一的 API 来进行数据库操作。
特点:
二、使用流程
1.初始化数据库驱动
在使用 QSqlDatabase 之前,需要初始化并加载要使用的数据库驱动。常见的数据库驱动包括 QSQLITE、QMYSQL、QPSQL 等。
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);// 初始化数据库驱动QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 如果是 MySQL 或 PostgreSQL 等,可以将 "QSQLITE" 替换成对应的驱动名称// QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");// QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); return a.exec();
}
2.连接数据库
使用 setHostName()、setDatabaseName()、setUserName()、setPassword() 等方法设置数据库连接的参数,然后调用 open() 方法打开数据库连接。
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);// 设置数据库连接参数db.setHostName("localhost");db.setDatabaseName("mydatabase");db.setUserName("username");db.setPassword("password");// 打开数据库连接if (db.open()) {qDebug() << "Database connected!";} else {qDebug() << "Error opening database:" << db.lastError().text();}return a.exec();
}
3.执行 SQL 查询
一旦数据库连接成功,可以通过 QSqlQuery 对象执行 SQL 查询和操作。
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);// 创建 QSqlQuery 对象,并执行 SQL 查询QSqlQuery query;if (query.exec("SELECT * FROM mytable")) {while (query.next()) {QString name = query.value(0).toString();int age = query.value(1).toInt();qDebug() << "Name:" << name << ", Age:" << age;}} else {qDebug() << "Query failed:" << query.lastError().text();}return a.exec();
4.关闭数据库连接
在不再需要访问数据库时,应该关闭数据库连接。
// 关闭数据库连接
db.close();
三、常用函数的介绍
static QSqlDatabase addDatabase(const QString& type, const QString& connectionName = QLatin1String(defaultConnection));
函数作用:
void setDatabaseName(const QString& name);
函数作用:
void QSqlDatabase::setHostName(const QString &host);
void QSqlDatabase::setUserName(const QString &name);
void QSqlDatabase::setPassword(const QString &password);
函数作用:
- 用于设置数据库服务器的主机名、用户名和密码。
bool QSqlDatabase::open(const QString &user, const QString &password);
bool QSqlDatabase::isOpen() const;
函数作用:
void QSqlDatabase::close();
函数作用:
- 用于关闭数据库连接。
QSqlError QSqlDatabase::lastError() const;
函数作用:
- 用于获取数据库连接的最后一次错误。
四、使用QSqlDatabase创建数据表和插入数据
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 添加 SQLite 数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库连接属性db.setDatabaseName("user.db"); // 设置数据库文件名// 打开数据库连接if (db.open()) {qDebug() << "Database connected successfully";// 创建数据表QSqlQuery createTableQuery;if (createTableQuery.exec("CREATE TABLE IF NOT EXISTS users_info (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")) {qDebug() << "Table created successfully";// 插入数据QSqlQuery insertDataQuery;if (insertDataQuery.exec("INSERT INTO users_info (name, age) VALUES ('John', 30), ('Alice', 25), ('Bob', 35)")) {qDebug() << "Data inserted successfully";} else {qDebug() << "Data insertion error:" << insertDataQuery.lastError().text();}} else {qDebug() << "Table creation error:" << createTableQuery.lastError().text();}// 关闭数据库连接db.close();} else {qDebug() << "Database connection error:" << db.lastError().text();}return a.exec();
}
输出结果:
五、使用QSqlDatabase使用查询数据表中的数据
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 添加 SQLite 数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库连接属性db.setDatabaseName("user.db"); // 设置数据库文件名// 打开数据库连接if (db.open()) {qDebug() << "Database connected successfully";// 查询数据表数据QSqlQuery query("SELECT * FROM users_info");// 执行查询if (query.exec()) {// 打印查询结果while (query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();int age = query.value("age").toInt();qDebug() << "ID:" << id << "Name:" << name << "Age:" << age;}} else {qDebug() << "Query error:" << query.lastError().text();}// 关闭数据库连接db.close();} else {qDebug() << "Database connection error:" << db.lastError().text();}return a.exec();
}
输出结果:
六、使用QSqlDatabase更新数据表中的数据
更新数据表的某一条数据#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 添加 SQLite 数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库连接属性db.setDatabaseName("user.db"); // 设置数据库文件名// 打开数据库连接if (db.open()) {qDebug() << "Database connected successfully";// 更新数据表数据QSqlQuery updateQuery;// 使用参数化查询,防止 SQL 注入攻击updateQuery.prepare("UPDATE users_info SET age = :newAge WHERE id = :userId");// 绑定参数updateQuery.bindValue(":newAge", 60); // 新的年龄updateQuery.bindValue(":userId", 1); // 待更新的用户ID// 执行更新if (updateQuery.exec()) {qDebug() << "Data updated successfully";} else {qDebug() << "Update error:" << updateQuery.lastError().text();}// 关闭数据库连接db.close();} else {qDebug() << "Database connection error:" << db.lastError().text();}return a.exec();
}
输出结果:
七、使用QSqlDatabase删除数据表中的数据
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 添加 SQLite 数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库连接属性db.setDatabaseName("user.db"); // 设置数据库文件名// 打开数据库连接if (db.open()) {qDebug() << "Database connected successfully";// 删除数据表数据QSqlQuery deleteQuery;// 使用参数化查询,防止 SQL 注入攻击deleteQuery.prepare("DELETE FROM users_info WHERE id = :userId");// 绑定参数deleteQuery.bindValue(":userId", 1); // 待删除的用户ID// 执行删除if (deleteQuery.exec()) {qDebug() << "Data deleted successfully";} else {qDebug() << "Delete error:" << deleteQuery.lastError().text();}// 关闭数据库连接db.close();} else {qDebug() << "Database connection error:" << db.lastError().text();}return a.exec();
}