Qt读写SQLite示例
在 Qt 中读写数据库,常用的方式是通过 Qt SQL 模块(QtSql),它提供了一个统一的数据库访问接口,支持多种数据库驱动(SQLite、MySQL、PostgreSQL、ODBC 等)。
对于轻量级的嵌入式应用,SQLite 是最常用的数据库,因为它无需安装独立服务,只需要一个数据库文件即可完成数据存储和读写,非常适合 Qt 桌面应用。
✅ Qt 访问数据库的常用方式
方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
QSqlDatabase + QSqlQuery | 直接操作 SQL 语句,灵活、通用 | 需要手动写 SQL,容易出错 | 对 SQL 熟悉,灵活需求 |
QSqlTableModel / QSqlRelationalTableModel | 直接与 Qt Model/View 框架配合,支持表格视图显示 | 只适合简单表格,不便于复杂查询 | 需要与 QTableView 绑定的 UI |
QSqlQueryModel | 支持只读 SQL 查询结果显示 | 不能直接修改数据 | 需要展示查询结果但不修改数据 |
👉 推荐:
如果你只是简单地读写数据库,用 QSqlDatabase + QSqlQuery 方式最灵活。
如果要直接绑定到
QTableView
,可以用QSqlTableModel
。
💡 示例:Qt 读写 SQLite 数据库
以下示例演示如何使用 QSqlDatabase + QSqlQuery 完成创建数据库、建表、插入数据、查询数据的完整流程。
1️⃣ 工程配置
在 .pro 文件中加入:
QT += sql
2️⃣ 代码示例 (main.cpp)
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 1. 连接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db"); // 数据库文件,不存在会自动创建if (!db.open()) {qDebug() << "无法打开数据库:" << db.lastError().text();return -1;}QSqlQuery query;// 2. 创建表if (!query.exec("CREATE TABLE IF NOT EXISTS person (""id INTEGER PRIMARY KEY AUTOINCREMENT,""name TEXT,""age INTEGER)")) {qDebug() << "创建表失败:" << query.lastError().text();}// 3. 插入数据query.prepare("INSERT INTO person (name, age) VALUES (?, ?)");query.addBindValue("Alice");query.addBindValue(25);if (!query.exec())qDebug() << "插入数据失败:" << query.lastError().text();query.addBindValue("Bob");query.addBindValue(30);if (!query.exec())qDebug() << "插入数据失败:" << query.lastError().text();// 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 0;
}
🔑 关键点说明
数据库驱动:
SQLite 驱动名是
QSQLITE
,Qt 自带,无需额外安装。
自动创建文件:
db.setDatabaseName("test.db")
如果文件不存在会自动生成。
参数绑定:
使用
query.prepare
和query.addBindValue
可以避免 SQL 注入问题。
🖼️ 如果需要 UI 表格展示
可以直接在 QTableView
里显示:
QSqlTableModel *model = new QSqlTableModel(this, db);
model->setTable("person");
model->select();
ui->tableView->setModel(model);
✅ 总结
最通用:
QSqlDatabase + QSqlQuery
,适合所有读写操作。快速显示表格:
QSqlTableModel + QTableView
,适合简单的 CRUD 界面。