Qt 高阶 03|Qt 数据库开发 SQLite/MySQL 连接、QSqlQuery、事务使用
2026/6/10 6:50:22 网站建设 项目流程

一、模块引入

.pro添加数据库模块:

pro

QT += sql

二、SQLite(文件数据库,无需服务,嵌入式首选)

SQLite Qt 内置驱动,开箱即用。

cpp

运行

#include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> // 1. 创建数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("test.db"); // 数据库文件路径 if(!db.open()) { qDebug() << "打开失败:" << db.lastError().text(); return; } // 2. 建表 QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"); // 3. 插入数据 query.exec("INSERT INTO user(name) VALUES('张三')"); // 4. 查询数据 query.exec("SELECT * FROM user"); while(query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << id << name; }

三、MySQL 连接(需驱动 + 服务端)

cpp

运行

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setPort(3306); db.setDatabaseName("dbname"); db.setUserName("root"); db.setPassword("123456"); if(!db.open()) { qDebug() << "MySQL 连接失败:" << db.lastError().text(); }

四、预处理语句(防 SQL 注入)

cpp

运行

QSqlQuery query; query.prepare("INSERT INTO user(name) VALUES(:name)"); query.bindValue(":name", "李四"); query.exec();

五、数据库事务

多条 SQL 要么全部执行成功,要么全部回滚。

cpp

运行

db.transaction(); // 开启事务 bool ok1 = query.exec("INSERT INTO user(name) VALUES('A')"); bool ok2 = query.exec("INSERT INTO user(name) VALUES('B')"); if(ok1 && ok2) db.commit(); // 提交 else db.rollback(); // 回滚

小结

本地单机、嵌入式优先 SQLite;服务端、多客户端选用 MySQL;复杂批量操作务必使用事务保证数据一致性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询