在 Visual Studio (VS) 这一强大的集成开发环境中,利用 Qt 框架进行数据库应用程序开发是一种高效且专业的选择,Qt 提供了功能完善的 Qt SQL 模块,它通过统一的接口抽象了与多种数据库的交互细节,使得开发者可以轻松地在后端切换不同类型的数据库,而无需大规模重写代码,本文将详细介绍如何在 VS 环境下配置 Qt 项目,并编写代码以实现数据库的连接与操作。

核心概念与准备工作
首先需要明确,VS 在此过程中扮演的是“容器”和“编译器”的角色,而真正执行数据库操作的是 Qt 框架,连接数据库的核心在于正确配置和使用 Qt SQL 模块。
在开始之前,请确保您已具备以下条件:
- 安装 Visual Studio:建议使用较新的版本,并安装 C++ 开发组件。
- 安装 Qt:下载并安装与您的 VS 版本相对应的 Qt 库(使用 MSVC 2019 64-bit 编译器的 Qt 版本)。
- 安装 Qt Visual Studio Tools:这是一个 VS 插件,它能让您在 VS 中直接创建、管理和编译 Qt 项目。
- 准备数据库:您需要一个数据库管理系统,对于初学者,SQLite 是一个绝佳的选择,因为它是一个轻量级的、基于文件的数据库,无需独立安装和配置服务器,您也可以使用 MySQL、PostgreSQL 等其他数据库。
在 Visual Studio 中配置项目
配置是连接成功的第一步,在 VS 中创建一个 Qt Widgets Application 或 Qt Console Application 后,关键的一步是告诉项目需要使用 Qt SQL 模块。
- 在“解决方案资源管理器”中,右键点击您的项目,选择“属性”。
- 在属性页中,导航到“配置属性” -> “Qt Project Settings”。
- 在“Qt Modules”选项中,勾选
sql,这一步会自动在项目配置中添加必要的编译器和链接器设置,相当于在.pro文件中写入QT += sql。
完成此配置后,VS 就会在编译时链接 Qt SQL 相关的库文件。

编写数据库连接代码
配置完成后,就可以编写 C++ 代码来连接数据库了,以下是一个使用 SQLite 的完整示例,展示了从连接到执行查询的基本流程。
#include <QCoreApplication>
#include <QtSql>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 1. 添加数据库驱动,这里使用SQLite
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 2. 设置数据库文件名
db.setDatabaseName("mydatabase.db"); // 如果文件不存在,会自动创建
// 3. 打开数据库连接
if (!db.open()) {
// 如果打开失败,打印错误信息
qDebug() << "数据库连接失败:" << db.lastError().text();
return -1;
}
qDebug() << "数据库连接成功!";
// 4. 执行SQL语句
QSqlQuery query;
// 创建一个表
bool success = query.exec("CREATE TABLE IF NOT EXISTS users ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(50) NOT NULL, "
"age INTEGER)");
if (!success) {
qDebug() << "创建表失败:" << query.lastError().text();
} else {
qDebug() << "表创建成功或已存在。";
}
// 插入数据
query.prepare("INSERT INTO users (name, age) VALUES (?, ?)");
query.addBindValue("张三");
query.addBindValue(28);
if (!query.exec()) {
qDebug() << "插入数据失败:" << query.lastError().text();
} else {
qDebug() << "插入数据成功。";
}
// 5. 关闭数据库连接(程序退出时会自动关闭,但显式关闭是好习惯)
db.close();
return a.exec();
}
常用数据库驱动一览
Qt SQL 的强大之处在于其驱动模型,只需更换驱动名称和连接参数,即可连接不同的数据库,下表列出了一些常见的数据库及其对应的 Qt 驱动名称。
| 数据库类型 | Qt 驱动名称 | 备注 |
|---|---|---|
| SQLite | QSQLITE | 轻量级,文件型数据库,无需服务器 |
| MySQL | QMYSQL | 需要单独编译驱动或使用预编译版本 |
| PostgreSQL | QPSQL | 功能强大的开源关系型数据库 |
| ODBC | QODBC | 通用接口,可连接所有支持ODBC的数据库(如Access, SQL Server) |
| Oracle | QOCI | 用于连接 Oracle 数据库 |
相关问答FAQs
问题1:我连接 MySQL 时提示 "Driver not loaded" 错误,怎么办?
解答: 这是一个非常常见的问题,出现此错误意味着 Qt 在运行时找不到对应的数据库驱动插件(qsqlmysql.dll),Qt 官方提供的预编译二进制包通常不包含 MySQL 的驱动,因为 MySQL 的连接库(libmysql.dll)有其自己的许可证,解决方法有两种:

- 自行编译驱动:下载 Qt 源码和 MySQL 的连接库,按照 Qt 官方文档的说明,使用与您 Qt 版本相同的编译器(如 MSVC)重新编译
qsqlmysql插件,然后将生成的qsqlmysql.dll和相关依赖文件复制到 Qt 安装目录下的plugins/sqldrivers文件夹中。 - 寻找预编译驱动:在社区或第三方资源网站上寻找与您的 Qt 版本、编译器版本和 MySQL 版本完全匹配的预编译驱动文件,然后将其放置到正确的
plugins/sqldrivers目录下。
问题2:Qt 可以连接 Microsoft Access 数据库吗?
解答: 可以,连接 Access 数据库最可靠的方式是通过 ODBC,具体步骤如下:
- 在 Windows 系统中,通过“ODBC 数据源管理器”(可在控制面板中搜索)创建一个“用户 DSN”或“系统 DSN”,配置它指向您的
.mdb或.accdb文件,并为其命名(MyAccessDB)。 - 在 Qt 代码中,使用
QODBC驱动进行连接。QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("MyAccessDB"); // 这里使用您在ODBC中设置的DSN名称 if (db.open()) { // 连接成功 } - 另一种无需设置 DSN 的方法是使用连接字符串,直接指定数据库文件路径:
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=C:\\path\\to\\your\\database.accdb");这种方式更加灵活,但连接字符串的写法需要根据驱动版本和系统环境进行微调。