Qt的数据库模块介绍,Qt访问SQLite详细示例
在 Qt 中访问数据库,官方推荐使用 Qt SQL 模块,主要通过 QSqlDatabase
、QSqlQuery
、QSqlTableModel
等类来操作各种数据库(SQLite、MySQL、PostgreSQL、Oracle 等)。
对于轻量级本地存储,SQLite 是最常用的数据库之一,因为它无需独立服务器、跨平台、零配置。
下面详细介绍 访问方式 和 SQLite Demo。
1️⃣ Qt 访问数据库的方式
方式 | 特点 | 适用场景 |
---|---|---|
QSqlDatabase + QSqlQuery | 直接操作 SQL 语句,灵活、通用 | 需要执行复杂 SQL 或自定义查询 |
QSqlTableModel / QSqlQueryModel | 模型/视图模式,直接绑定到 UI(如 QTableView) | 数据表直接展示、增删改查 |
QSqlRelationalTableModel | 支持外键关联 | 多表关系操作 |
👉 SQLite 属于文件型数据库,Qt 内置驱动名为 QSQLITE
,只要系统有 SQLite 库即可直接使用。
2️⃣ SQLite 示例 Demo(QSqlDatabase + QSqlQuery)
下面提供一个完整的 Qt Demo,包括创建数据库、建表、插入数据、查询数据。
📂 文件结构
假设使用 Qt Creator + Widgets 项目
main.cpp
mainwindow.h / mainwindow.cpp (可选)
✅ main.cpp
#include <QApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>bool initDatabase()
{// 1. 连接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db"); // 数据库文件名(自动创建)if (!db.open()) {qDebug() << "无法打开数据库:" << db.lastError().text();return false;}// 2. 创建表QSqlQuery query;QString createSql ="CREATE TABLE IF NOT EXISTS person (""id INTEGER PRIMARY KEY AUTOINCREMENT,""name TEXT,""age INTEGER)";if (!query.exec(createSql)) {qDebug() << "建表失败:" << query.lastError().text();return false;}// 3. 插入数据query.prepare("INSERT INTO person (name, age) VALUES (:name, :age)");query.bindValue(":name", "Alice");query.bindValue(":age", 25);if (!query.exec()) {qDebug() << "插入数据失败:" << query.lastError().text();}query.bindValue(":name", "Bob");query.bindValue(":age", 30);query.exec();// 4. 查询数据if (query.exec("SELECT id, name, age FROM person")) {while (query.next()) {int id = query.value(0).toInt();QString name = query.value(1).toString();int age = query.value(2).toInt();qDebug() << "id:" << id << " name:" << name << " age:" << age;}} else {qDebug() << "查询失败:" << query.lastError().text();}return true;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);if (initDatabase()) {qDebug() << "数据库初始化完成";}return a.exec();
}
⚙️ pro 文件配置
确保在 .pro
文件中加入 Qt SQL 模块:
QT += sql
3️⃣ 补充:用 QSqlTableModel 绑定到 UI
如果需要在 QTableView
中直接显示数据:
#include <QSqlTableModel>
#include <QTableView>QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("person");
model->select(); // 查询所有数据QTableView *view = new QTableView;
view->setModel(model);
view->show();
这样可以直接进行增删改查,无需手写 SQL。
💡总结
方式 | 优点 | 缺点 |
---|---|---|
QSqlQuery | 灵活、可执行任何 SQL 语句 | 需要自己写 SQL |
QSqlTableModel | 快速绑定 UI,适合简单表操作 | 对复杂查询支持不足 |
👉 推荐方案:
简单数据展示 →
QSqlTableModel + QTableView
复杂逻辑/多表查询 →
QSqlQuery