Qt 高阶 03|Qt 数据库开发 SQLite/MySQL 连接、QSqlQuery、事务使用
·
一、模块引入
.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;复杂批量操作务必使用事务保证数据一致性。
更多推荐

所有评论(0)