Qt数据库编程详解:SQLite实战指南
Qt数据库编程详解:SQLite实战指南
目录
- SQLite数据库简介
- Qt数据库核心类
- 数据库操作全流程
- CRUD操作实战
- 运行效果展示
1. SQLite数据库简介
SQLite是Qt内置的轻量级嵌入式数据库:
核心优势:
- 无需单独安装或配置
- 数据库存储在单个文件中(.db或.db3后缀)
- 支持标准SQL语法
- 适用于嵌入式设备和移动应用
- Qt提供原生支持(无需额外驱动)
⚠️ 使用前需在.pro文件添加:
QT += sql
2. Qt数据库核心类
数据库操作双核心类:
类名 | 作用 | 关键方法 |
---|---|---|
QSqlDatabase | 数据库连接管理 | addDatabase() , open() , close() |
QSqlQuery | SQL语句执行和结果集操作 | exec() , prepare() , next() |
QSqlTableModel | 数据表模型(高级操作) | setTable() , select() |
QSqlError | 数据库错误处理 | text() , type() |
类关系图:
3. 数据库操作全流程
六步完成数据库操作:
4. CRUD操作实战
(1) 创建数据库和数据表
// 添加SQLite驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("contacts.db"); // 数据库文件// 打开数据库
if(!db.open()) {qDebug() << "数据库打开失败:" << db.lastError().text();return;
}// 创建数据表
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS contacts (""id INTEGER PRIMARY KEY AUTOINCREMENT, ""name TEXT NOT NULL, ""phone TEXT, ""email TEXT)");
(2) 插入数据(Create)
// 准备插入语句
query.prepare("INSERT INTO contacts (name, phone, email) ""VALUES (:name, :phone, :email)");// 绑定值
query.bindValue(":name", "张三");
query.bindValue(":phone", "13800138000");
query.bindValue(":email", "zhangsan@example.com");// 执行插入
if(!query.exec()) {qDebug() << "插入失败:" << query.lastError().text();
}
(3) 查询数据(Read)
query.exec("SELECT * FROM contacts");
while(query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();QString phone = query.value("phone").toString();qDebug() << "ID:" << id << "| 姓名:" << name << "| 电话:" << phone;
}
(4) 更新数据(Update)
query.prepare("UPDATE contacts SET phone = :phone WHERE name = :name");
query.bindValue(":phone", "13900139000");
query.bindValue(":name", "张三");
query.exec();
(5) 删除数据(Delete)
query.exec("DELETE FROM contacts WHERE name = '李四'");
(6) 使用模型视图(高级)
QSqlTableModel *model = new QSqlTableModel;
model->setTable("contacts");
model->select();// 在表格视图中显示
QTableView *view = new QTableView;
view->setModel(model);
view->show();
5. 运行效果展示
数据库文件结构:
contacts.db 文件内容:
┌────┬─────────┬──────────────┬──────────────────────┐
│ id │ name │ phone │ email │
├────┼─────────┼──────────────┼──────────────────────┤
│ 1 │ 张三 │ 13900139000 │ zhangsan@example.com │
│ 2 │ 王五 │ 13700137000 │ wangwu@example.com │
└────┴─────────┴──────────────┴──────────────────────┘
查询结果输出:
ID: 1 | 姓名: 张三 | 电话: 13900139000
ID: 2 | 姓名: 王五 | 电话: 13700137000
完整源码:GitHub数据库示例
官方文档:
- Qt SQL模块
- SQLite语法参考
最佳实践: - 使用事务处理批量操作提升性能
- 使用参数绑定防止SQL注入攻击
- 数据库操作放在独立线程避免界面卡顿
原创技术笔记,转载需注明出处。更多系统编程内容持续更新中…