Qt C++ 入门教程:SQL 数据库调用(零基础完整版)

张开发
2026/5/12 20:31:08 15 分钟阅读
Qt C++ 入门教程:SQL 数据库调用(零基础完整版)
前言相信你已经搞定了 Qt HelloWorld接下来咱们直奔主题——用最简单、最实用、能直接复制运行的方式学会 Qt 操作 SQL 数据库 核心优势全程不用额外安装任何数据库直接使用 Qt 自带的 SQLite轻量文件型数据库开箱即用、零配置学会后切换到 MySQL、SQL Server 操作逻辑几乎完全一致新手也能快速上手一、先搞懂Qt 操作数据库核心就2件事1. 启用 Qt 数据库核心模块Qt 操作数据库依赖Qt SQL 模块无需复杂配置只需2步就能启用新手直接照做第一步在项目的 .pro 文件中添加配置关键缺一不可第二步引入必要的头文件复制粘贴即可不用死记所需头文件及作用注释清晰新手能看懂#include QSqlDatabase // 负责数据库的连接、打开、关闭 #include QSqlQuery // 核心类执行所有SQL语句增删改查 #include QSqlError // 查看操作错误信息排坑必备 #include QDebug // 打印日志查看执行结果调试用2. 咱们要实现的核心功能新手友好不贪多不搞复杂功能聚焦4个最常用、最基础的数据库操作学会就能应对80%的基础场景连接数据库自动创建本地 .db 文件不用手动新建创建数据表定义数据结构比如存储文章、通讯录等插入数据往表中添加内容模拟实际使用场景查询数据并打印验证操作结果直观看到效果二、关键步骤配置项目必做否则运行报错重点提醒这一步是基础少做一步都会报错新手一定要仔细看操作步骤打开你的 Qt 项目无论是控制台项目、Widget项目都可以找到项目根目录下的项目名.pro文件比如你的项目叫 TestDb就是 TestDb.pro在 .pro 文件中添加一行代码QT core gui sql原有内容不变新增这行按 Ctrl S 保存文件Qt 会自动加载 SQL 模块无需手动重启 Qt。✅ 示例.pro 文件修改后效果QT core gui sql // 新增sql启用数据库模块 greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES \ main.cpp \ mainwindow.cpp HEADERS \ mainwindow.h FORMS \ mainwindow.ui # Default rules for deployment. qnx: target.path /tmp/$${TARGET}/bin else: unix:!android: target.path /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS target三、完整可直接运行代码复制即用新手福音为了直观咱们直接在 main.cpp 里写所有操作无需额外创建文件代码中每一步都加了详细注释新手能看懂每一行的作用复制粘贴到你的项目中直接运行即可提示运行前确保 .pro 文件已添加 sql 配置否则会报错#include QCoreApplication #include QSqlDatabase #include QSqlQuery #include QSqlError #include QDebug int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // // 1. 添加并配置数据库使用 SQLite 本地文件零配置 // 说明QSQLITE 是 Qt 自带的 SQLite 驱动无需额外安装 // test.db 是数据库文件名会自动创建在程序运行目录下可自定义名称 // QSqlDatabase db QSqlDatabase::addDatabase(QSQLITE); db.setDatabaseName(test.db); // 数据库文件路径默认程序运行目录建议用英文路径 // // 2. 打开数据库判断是否打开成功排坑关键 // if(!db.open()) { // 打开失败时打印错误信息方便排查问题 qDebug() ❌ 数据库打开失败 db.lastError().text(); return 0; // 打开失败直接退出程序 } qDebug() ✅ 数据库打开成功; // // 3. 创建数据表article文章表 // 字段说明id主键自增、title文章标题非空、content文章内容非空 // IF NOT EXISTS避免表已存在时报错新手必加 // QSqlQuery query; // 创建SQL执行对象所有SQL语句都通过它执行 // 用R(...)包裹SQL语句避免转义字符麻烦直接复制SQL即可 QString createSql R( CREATE TABLE IF NOT EXISTS article ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- 主键自增无需手动赋值 title TEXT NOT NULL, -- 文章标题非空不能为空 content TEXT NOT NULL -- 文章内容非空 ) ); if(query.exec(createSql)) // 执行创建表的SQL语句 { qDebug() ✅ 表创建成功; } else { qDebug() ❌ 表创建失败 query.lastError().text(); } // // 4. 插入数据往article表中添加2条测试数据 // 说明可根据需求修改插入的内容多插几条也可以 // QString insertSql R( INSERT INTO article (title, content) VALUES (Qt 数据库入门, 这是我的第一个 Qt 数据库程序简单又实用), (SQLite 教程, Qt 自带 SQLite 数据库不用安装开箱即用适合新手入门) ); if(query.exec(insertSql)) { qDebug() ✅ 数据插入成功; } else { qDebug() ❌ 插入失败 query.lastError().text(); } // // 5. 查询数据最重要验证数据是否插入成功 // 循环读取表中所有数据并用qDebug打印出来 // QString selectSql SELECT * FROM article; // 查询表中所有数据 if(query.exec(selectSql)) { qDebug() 查询结果 ; // 循环读取每一行数据query.next()判断是否有下一行数据 while(query.next()) { // 根据列号取值0id1title2content对应创建表时的字段顺序 int id query.value(0).toInt(); // id是整数类型转成int QString title query.value(1).toString();// title是文本类型转成QString QString content query.value(2).toString();// content是文本类型转成QString // 打印查询结果格式清晰方便查看 qDebug() ID id; qDebug() 标题 title; qDebug() 内容 content; qDebug() ------------------------; } } else { qDebug() ❌ 查询失败 query.lastError().text(); } // // 6. 关闭数据库操作完成后关闭养成良好习惯 // db.close(); qDebug() ✅ 数据库已关闭; return a.exec(); }四、运行效果预览新手可对照验证运行程序后控制台会输出以下内容无报错即成功✅ 数据库打开成功 ✅ 表创建成功 ✅ 数据插入成功 查询结果 ID 1 标题 Qt 数据库入门 内容 这是我的第一个 Qt 数据库程序简单又实用 ------------------------ ID 2 标题 SQLite 教程 内容 Qt 自带 SQLite 数据库不用安装开箱即用适合新手入门 ✅ 数据库已关闭恭喜你的第一个 Qt 数据库程序已经成功运行此时在你的程序运行目录下会自动生成一个 test.db 文件这就是你的本地数据库文件五、核心知识点讲解新手必看拒绝死记硬背1. 为什么选择 SQLite新手首选SQLite 是轻量级文件型数据库也是 Qt 自带的数据库对新手极其友好优势如下零安装无需安装数据库服务Qt 直接自带驱动开箱即用零配置不需要账号、密码不需要配置端口创建 .db 文件就是一个数据库轻量级数据库文件体积小占用资源少适合本地小工具通用性强语法和 MySQL、SQL Server 基本一致学会后轻松切换。适用场景本地笔记工具、记账本、通讯录、简单爬虫数据存储等。2. Qt 数据库核心类2个就够了不用记太多类重点掌握这2个就能搞定所有基础操作QSqlDatabase负责数据库的连接、打开、关闭相当于“数据库的大门”QSqlQuery负责执行所有 SQL 语句增删改查相当于“操作数据库的工具”。3. 4种最常用 SQL 操作必记90%场景能用新手不用记复杂 SQL先掌握这4种基础操作后续再逐步拓展创建表CREATECREATE TABLE IF NOT EXISTS 表名 (字段1 类型 约束, 字段2 类型 约束...)示例创建用户表CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INT)插入数据INSERTINSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2)示例插入用户INSERT INTO user (name, age) VALUES (张三, 20)查询数据SELECTSELECT 字段 FROM 表名 WHERE 条件* 表示查询所有字段 示例查询所有用户SELECT * FROM user查询年龄18的用户SELECT * FROM user WHERE age 18删除/更新数据DELETE/UPDATE 删除DELETE FROM 表名 WHERE 条件示例删除id1的用户DELETE FROM user WHERE id1 更新UPDATE 表名 SET 字段值 WHERE 条件示例更新id2的用户年龄UPDATE user SET age22 WHERE id2六、新手常见错误排坑指南帮你少走弯路整理了新手最容易踩的5个坑每个坑都附解决方案遇到报错直接对照查找常见错误报错现象解决方案pro 文件没加 sql运行报错提示“未定义的引用”“无法找到 QSqlDatabase”在 .pro 文件中添加QT sql保存后重新运行SQL 语句写错执行失败控制台打印错误信息用query.lastError().text()查看错误提示检查SQL语法比如少写分号、字段名写错数据库路径有中文数据库打不开提示“无法打开数据库文件”将数据库文件名、路径改为全英文比如把“测试.db”改为“test.db”表已存在报错创建表时提示“table already exists”创建表时加上IF NOT EXISTS如代码中所示避免重复创建插入数据时字段不匹配插入失败提示“column count doesnt match value count”检查 INSERT 语句中字段数量和值的数量是否一致字段类型是否匹配七、实战拓展学会后能做什么小工具学会这套代码你可以直接上手做以下小工具全部用 Qt SQLite 实现无需额外依赖新手也能快速出成果 本地笔记工具存储笔记标题、内容、创建时间支持增删改查 个人记账本记录收入、支出、备注查询每月消费情况 通讯录工具存储联系人姓名、电话、邮箱支持搜索 本地文件管理工具记录文件路径、名称、大小方便快速查找 简单爬虫数据存储将爬虫爬取的内容如文章、图片链接存储到本地数据库。八、下一步学习方向循序渐进新手不迷茫掌握基础操作后可以继续学习以下内容逐步提升技能适配更复杂的场景Qt 界面 数据库结合用 QLineEdit输入框、QPushButton按钮实现手动输入数据、保存数据做出可视化工具MySQL 远程数据库连接学会连接远程 MySQL 数据库实现多设备数据共享QTableView 显示数据用表格控件直观展示数据库中的内容支持排序、筛选数据库事务解决多线程操作数据库、数据插入失败回滚等问题复杂 SQL 查询学习联表查询、分组查询、模糊查询应对更复杂的数据需求。文章总结新手必看Qt 操作数据库核心就3步配置 pro 文件加 sql→ 引入头文件 → 用 QSqlDatabase 连接数据库、QSqlQuery 执行 SQL 语句。SQLite 开箱即用不用装数据库适合新手入门学会这套操作切换到其他数据库MySQL、SQL Server几乎无压力。代码可直接复制运行重点理解每一步的作用多动手修改、测试很快就能掌握✨ 最后如果运行过程中遇到问题欢迎在评论区留言我会及时回复帮你解决觉得有用的话记得点赞收藏关注我后续持续更新 Qt 实战教程

更多文章