一、模块引入

.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;复杂批量操作务必使用事务保证数据一致性。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐