Qt连接MySQL数据库最详细教程


Qt MySQL连接示意图

被Qt连接数据库折磨了整整三天之后,终于迎来了胜利的曙光!这份详细教程希望能帮助正在为此苦恼的开发者们少走弯路。

🔧 直接通过MySQL驱动加载数据库

💻 所需核心代码

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("数据库名");
db.setUserName("用户名");
db.setPassword("密码");
bool ok = db.open();
if (ok){
    QMessageBox::information(this, "infor", "success");
}
else {
    QMessageBox::information(this, "infor", "open failed");
    qDebug()<<"error open database because"<<db.lastError().text();
}

别忘了在.pro文件中添加这行关键配置:

QT += sql

🛠️ 彻底解决QMYSQL driver not loaded难题

Qt连接MySQL的完整链条:应用程序 → Qt数据库插件 → MySQL动态库 → MySQL服务

Qt数据库插件存放位置

C:\Qt(安装路径)(Qt版本)\版本号(库)\mingw49_32(编译器)\plugins(插件)\sqldrivers(数据库插件)

需要的关键文件:

  • qsqlmysqld.dll (调试版本)
  • qsqlmysql.dll (发布版本)

MySQL动态库位置

C:\Qt\MySQLServer5.5(mysql安装路径)\lib

下的 libmysql.dll

终极解决方案三步走

  1. 🔗 文件复制 - 将MySQL的 libmysql.liblibmysql.dll 复制到Qt的bin目录

  2. 🔍 驱动检查 - 确认Qt目录中是否存在 qsqlmysqld.dll(调试版) 和 qsqlmysql.dll(发布版)

  3. 🧪 最终验证 - 运行以下检测代码:

// 输出所有可用数据库驱动
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
    qDebug()<<driver;

如果输出中出现了”MySQL”,那就恭喜你了!说明Qt已经成功识别MySQL驱动。

如果依然没有看到MySQL驱动,也不要沮丧,我们还有更好的解决方案——通过ODBC连接MySQL数据库。

2. 通过ODBC连接MySQL数据库

2.1 ODBC简介

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS)。这些API利用SQL来完成其大部分任务。

ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。

简单地说就是我的qt中含有ODBC的驱动,所以利用ODBC去使用MySQL的数据库。

2.2 下载ODBC

从官网下载,选择和qt编译器相同的字节(比如我的qt使用的是64字节的,下载的ODBC选择的也是64字节的),选择MSI类型的直接安装就可以。

下载一直点击next即可。查看点击小娜,搜索ODBC。

2.3 连接MySQL数据库

添加MySQL的DSN:

  • 红色的部分可以随便填,是自己对于ODBC驱动的描述
  • 粉色的是MySQL的用户名和密码
  • 数据库选择你在MySQL中创建的数据库名字即可

点击test如果出现成功提示说明连接成功。

2.4 Qt通过ODBC连接MySQL

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("是你在ODBC中创建的Data source name");
db.setUserName("用户名");
db.setPassword("密码");
bool ok = db.open();
if (ok){
    QMessageBox::information(this, "infor", "success");
}
else {
    QMessageBox::information(this, "infor", "open failed");
    qDebug()<<"error open database because"<<db.lastError().text();
}

运行程序,大功告成!

3. Qt通过ODBC操作数据库

3.1 查询数据

// 查询数据库中所有表的名称
QStringList tables = db.tables();
foreach(QString table, tables)
    qDebug()<<table;

// ODBC查询数据
QSqlQuery result = db.exec("select * from users");
while(result.next()){
    qDebug()<<"user_id:"<<result.value("user_id").toInt();
    qDebug()<<"name:"<<result.value("name").toString();
    qDebug()<<"password:"<<result.value("password").toString();
    qDebug()<<"score:"<<result.value("score").toInt()<<endl;
}

3.2 插入数据

// ODBC插入数据
result.clear();
bool result_successed = result.exec("insert into users(name,password,score) values ('joe2y','123456',0)");

if(result_successed){
    qDebug()<<"插入成功!";
}else {
    qDebug()<<"插入失败!";
}

3.3 更新数据

// ODBC更新数据
result.clear();
bool result_successed2 = result.exec("update users set score=10 where user_id=2");

if(result_successed2){
    qDebug()<<"更新成功!"<<endl;
}else{
    qDebug()<<"更新失败!"<<endl;
}

🎯 总结与建议

Qt连接MySQL数据库主要有两种靠谱方案:

  1. 直接MySQL驱动方式(适合环境配置完善的场景)
  2. ODBC连接方式(更通用稳定,强烈推荐)

遇到技术难题时千万别轻易放弃,多尝试几种解决方案。希望这篇详尽的教程能够帮助到每一位正在为Qt数据库连接而头疼的开发者朋友们!

让我们一起在技术的道路上越走越远!

AI助手